• 线程交互


    1. import java.util.concurrent.CountDownLatch;  
    2.   
    3. public class LatchDriverDemo {  
    4.    private static final  int N = 5;  
    5.    public static void main(String[] args) throws InterruptedException {  
    6.     // 用于向工作线程发送启动信号  
    7.        CountDownLatch startSignal = new CountDownLatch(1);  
    8.     // 用于等待工作线程的结束信号 CountDownLatch  
    9.        CountDownLatch doneSignal = new CountDownLatch(N);  
    10.        for (int i = 0; i < N; i++)   
    11.         // 创建启动线程  
    12.         new Thread(new LatchWorker(startSignal,doneSignal),"t"+i).start();  
    13.         // 得到线程开始工作的时间  
    14.         long start = System.currentTimeMillis();  
    15.         //主线程,递减开始计数,让所有线程开始工作  
    16.         startSignal.countDown();  
    17.         //主线程开始阻塞,等待其他线程完成  
    18.         startSignal.await();  
    19.         long end = System.currentTimeMillis();  
    20.           
    21.         //System.out.println("All Work Take Time : "+ (end - start)/1000.0+"s" );  
    22.         System.out.println(end+"   "+start);  
    23.    }  
    24. }  
    25.   
    26. import java.util.concurrent.CountDownLatch;  
    27.   
    28. public class LatchWorker implements Runnable{  
    29.     private final CountDownLatch startSignal;  
    30.     private final CountDownLatch doneSignal;  
    31.     public LatchWorker(CountDownLatch startSignal,CountDownLatch doneSignal){  
    32.         super();  
    33.         this.startSignal = startSignal;  
    34.         this.doneSignal = doneSignal;  
    35.     }  
    36.     @Override  
    37.     public void run() {  
    38.          try {  
    39.             startSignal.await();  
    40.             dowork();  
    41.             doneSignal.countDown();  
    42.         } catch (InterruptedException e) {  
    43.             e.printStackTrace();  
    44.         }  
    45.           
    46.     }  
    47.     private void dowork() {  
    48.         // TODO Auto-generated method stub  
    49.         int a = 0 ;  
    50.         for (int i = 0; i < 10000; i++) {  
    51.             a += 1;  
    52.         }  
    53.         System.out.println(Thread.currentThread().getName()+"="+a);  
    54.     }  
    55.      
    56. }  
  • 相关阅读:
    浅析HTT
    html5移动端页面分辨率设置及相应字体大小设置的靠谱使用方式
    CSS--posiion学习日记
    面向对象程序设计课程感想
    OO第二单元(5-8周)作业总结
    OO第一作业周期(前四周)总结
    OO第三阶段作业总结
    OO第二单元作业总结
    Java学习第一阶段作业总结
    面向对象OO课程学习总结
  • 原文地址:https://www.cnblogs.com/hold/p/3097083.html
Copyright © 2020-2023  润新知