您的位置:首页 > 职场人生

代码详解の使用CountDownLatch解决面试问题:T1和T2线程执行计算,T3线程计算结果的统计

2017-08-18 18:52 661 查看
package com.sdmjhca.springBootDemo.synchronizedtest;

import java.util.concurrent.CountDownLatch;

/**
* 例子:T1和T2线程执行计算,T3线程进行T1和T2结果的统计
* 思路定义一个“锁计数器”为2的线程并发类,T3通过await方法进行锁等待,T1执行完成后计数器-1,T2完成后计数器-1;
* 当计数器为0后,T3开始执行统计方法,得到最终计算结果
* @author JHMI on 2017/8/18.
*/
public class SynchronizedMain {
private static CountDownLatch start = new CountDownLatch(1);
private static CountDownLatch end = new CountDownLatch(2);
private static int i = 1;

private static int j = 1;
public static void main(String args[]) throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
start.await();
System.out.println("T1开始执行");

//SynchronizedTest.staticIn.method1();
i++;
//Thread.sleep(1000);
end.countDown();
System.out.println("T1计算结束");
} catch (InterruptedException e) {
e.printStackTrace();
}

}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
start.await();
System.out.println("T2开始执行");

// SynchronizedTest.staticIn.method2();

j++;
//Thread.sleep(1000);
end.countDown();
System.out.println("T2执行结束");
} catch (InterruptedException e) {
e.printStackTrace();
}

}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
try {

start.await();
System.out.println("T3开始执行,进入等待状态");
end.await();
System.out.println("获得锁 开始执行T3");
} catch (InterruptedException e) {
e.printStackTrace();
}
//Thread.sleep(1000);

int c = i+j;
System.out.println("统计结果="+c);
System.out.println("T3执行结束");

}
});
t1.start();
t2.start();
t3.start();
start.countDown();
/* i = i+j;
System.out.println("i="+i);*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐