dabocaiqq
2020-07-14 13:44
采纳率: 66.6%
浏览 97

高分悬赏:Java语言编写一个多线程的例子程序给我,要完整,要求如下:

高分悬赏:Java语言编写一个多线程的例子程序给我,要完整,要求如下:
(1)分为10个以上的不同的线程,每个做不同的事情
(2)每个线程执行的时间超过10秒钟
(3)主程序触发所有的线程同时执行
(4)线程执行不能卡,需要回报其中的结果到主程序。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 毕小宝 2020-08-07 13:41
    已采纳

    http://www.mamicode.com/info-detail-50277.html 的代码粘贴上去
    这篇文章讲解的很详细。

    点赞 打赏 评论
  • 牛虻~ 2020-07-14 14:54

    Test类

    public static void main(String[] args) throws ExecutionException, InterruptedException {
            exeThread(new Thread1(), new Thread2(), new Thread3());
        }
    
        private static void exeThread(Callable... threads) throws InterruptedException, ExecutionException {
            List<FutureTask> list = new ArrayList<>();
            for (Callable c: threads) {
                FutureTask<String> task = new FutureTask<String>(c);
                new Thread(task).start();
                list.add(task);
            }
            System.out.println("执行中。。。。。。。");
            for (FutureTask item: list) {
                System.out.println("task return:" + item.get());
            }
        }
    
    

    thread类

    package thread;
    
    import org.omg.Messaging.SyncScopeHelper;
    
    import java.util.concurrent.Callable;
    
    public class Thread1 implements Callable<String>{
        @Override
        public String call() throws Exception {
            System.out.println("threa1正在执行。。。。。。。。。。");
            Thread.sleep(5000);
            return "thread1执行完毕";
        }
    }
    
    package thread;
    
    import java.util.concurrent.Callable;
    
    public class Thread2 implements Callable<String>{
        @Override
        public String call() throws Exception {
            System.out.println("threa2正在执行。。。。。。。。。。");
            Thread.sleep(5000);
            return "thread2执行完毕";
        }
    }
    
    package thread;
    
    import java.util.concurrent.Callable;
    
    public class Thread3 implements Callable<String>{
        @Override
        public String call() throws Exception {
            System.out.println("threa3正在执行。。。。。。。。。。");
            Thread.sleep(5000);
            return "thread3执行完毕";
        }
    }
    

    get方法为阻塞方法,运行这个方法时会等待这个线程执行完毕

    点赞 打赏 评论
  • 浴火_凤凰 2020-07-14 16:13

    我写的是 :主线程 产生10个子线程 分别去读不同的文件内容,子线程读完文件之后 把结果返回给主线程

    下面的是主线程TestMain.java 我使用的是测试Junit

    package com.ccg.test;
    
    import org.junit.Test;
    
    public class TestMain {
    
        @Test
        public  void TestMain() throws InterruptedException{
            String f1 = "E:\\txt\\A.txt";
            for(int i=0;i<10;i++)
            {
                System.out.println(f1.replace('A', String.valueOf(i).charAt(0)).toString());
                new Thread(new CallbackThread(new TestMain(), f1.replace('A', String.valueOf(i).charAt(0)),i)).start();
            } 
        }
    
        public void receiveFileStr(String fileName,String readStr){
            StringBuffer sb = new StringBuffer();
            sb.append(fileName + ":" + readStr);
            System.out.println(sb.toString());
        }
    }
    

    下面的是子线程代码:CallbackThread.java

    package com.ccg.test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    
    public class CallbackThread implements Runnable{
    
        private String fileName;
        private TestMain callBack;
        private long millis;
    
        public CallbackThread(TestMain callBack,String fileName,long millis) {
            this.fileName = fileName;
            this.callBack = callBack;
            this.millis=millis;
        }
    
        @Override
        public void run() {
            try {
                File file = new File(fileName);
                InputStreamReader in = new InputStreamReader(new FileInputStream(file),"gbk");
                BufferedReader br = new BufferedReader(in);
                String str = br.readLine();
                //通知线程调用者run方法执行结果
                callBack.receiveFileStr(fileName,str);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题