关于假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

第一种方法:

直接用join把线程5加入进去即可

第二种方法:

用java.util.concurrent下的方法解决

CountDownLatch : 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行

CountDownLatch 是计数器, 线程完成一个就记一个, 就像 报数一样, 只不过是递减的.

盗用别人的一个例子:

public class CountDownLatchDemo {  
    final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    public static void main(String[] args) throws InterruptedException {  
        CountDownLatch latch=new CountDownLatch(2);//两个工人的协作  
        Worker worker1=new Worker("zhang san", 5000, latch);  
        Worker worker2=new Worker("li si", 8000, latch);  
        worker1.start();//  
        worker2.start();//  
        latch.await();//等待所有工人完成工作  
        System.out.println("all work done at "+sdf.format(new Date()));  
    }  
      
      
    static class Worker extends Thread{  
        String workerName;   
        int workTime;  
        CountDownLatch latch;  
        public Worker(String workerName ,int workTime ,CountDownLatch latch){  
             this.workerName=workerName;  
             this.workTime=workTime;  
             this.latch=latch;  
        }  
        public void run(){  
            System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));  
            doWork();//工作了  
            System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));  
            latch.countDown();//工人完成工作,计数器减一  
  
        }  
          
        private void doWork(){  
            try {  
                Thread.sleep(workTime);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
      
       
} 
CyclicBarrier        :  N个线程 相互等待,任何一个线程完成之前,所有的线程都必须等待。
这样应该就清楚一点了,对于CountDownLatch来说,重点是那个 “一个线程” , 是它在等待, 而另外那N的线程在把 “某个事情” 做完之后可以继续等待,可以终止。而对于CyclicBarrier来说,重点是那 N个线程 ,他们之间任何一个没有完成,所有的线程都必须等待。

CyclicBarrier更像一个水闸, 线程执行就想水流, 在水闸处都会堵住, 等到水满(线程到齐)了, 才开始泄流.
参考网址:http://xumingming.sinaapp.com/215/countdownlatch-vs-cyclicbarrier/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的多线程模块`threading`来实现。具体实现方法如下: ```python import threading # 定义一个全局变量num来记录当前需要打印的数字 num = 1 # 定义一个线程类 class PrintThread(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): global num for i in range(10): # 使用线程锁来确保每个线程依次打印 lock.acquire() print("Thread %s prints %d" % (self.name, num)) num += 1 lock.release() if __name__ == '__main__': # 创建一个线程锁 lock = threading.Lock() # 创建四个线程 t1 = PrintThread("1") t2 = PrintThread("2") t3 = PrintThread("3") t4 = PrintThread("4") # 启动四个线程 t1.start() t2.start() t3.start() t4.start() # 等待四个线程结束 t1.join() t2.join() t3.join() t4.join() ``` 运行以上代码,输出结果如下: ``` Thread 1 prints 1 Thread 1 prints 2 Thread 1 prints 3 Thread 1 prints 4 Thread 1 prints 5 Thread 1 prints 6 Thread 1 prints 7 Thread 1 prints 8 Thread 1 prints 9 Thread 1 prints 10 Thread 2 prints 11 Thread 2 prints 12 Thread 2 prints 13 Thread 2 prints 14 Thread 2 prints 15 Thread 2 prints 16 Thread 2 prints 17 Thread 2 prints 18 Thread 2 prints 19 Thread 2 prints 20 Thread 3 prints 21 Thread 3 prints 22 Thread 3 prints 23 Thread 3 prints 24 Thread 3 prints 25 Thread 3 prints 26 Thread 3 prints 27 Thread 3 prints 28 Thread 3 prints 29 Thread 3 prints 30 Thread 4 prints 31 Thread 4 prints 32 Thread 4 prints 33 Thread 4 prints 34 Thread 4 prints 35 Thread 4 prints 36 Thread 4 prints 37 Thread 4 prints 38 Thread 4 prints 39 Thread 4 prints 40 ``` 可以看到,四个线程依次打印出了1~40的数字,且每个线程都打印了10次。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值