代码详解の使用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);*/ } }
相关文章推荐
- 实现T1线程执行后再执行T2线程,之后再执行T3线程
- 在C#中解决动态计算表达式的问题(如字符串"Sin(1)+Cos(2)",执行并得出结果)
- 1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
- 在一个有返回值的方法里使用了子线程,如何返回子线程中的值,如下代码中,我在子线程获取到了address的值,但是这个方法的返回结果是空,该如何解决?
- GCD的定义及使用详解(同步异步、并发串行、线程间通信、延时执行、只执行一次代码)
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
- CountDownLatch使用countDown方法来触发其他等待线程再执行的问题
- 使用严老师VS2017版PSINS程序计算没有ins结果好的问题解决
- TestNG方法测试及注意要点 代码及配置详解(解决testng方法不执行问题)
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
- 1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
- 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
- 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行
- Selenium Webdriver 的使用java执行js代码 解决 ScriptEngine不支持浏览器内置对象window,document的问题
- 1.如果你有三个线程,分别为T1,T2,T3,如何让线程T2在线程T1之后执行,在线程T3之前执行。
- 使用CountDownLatch来重写BlockingQueue解决线程通信不及时问题
- 现有T1、T2、T3三个线程,你怎样保证T2在T1执行完成之后执行,T3在T2执行完后执行?
- JSP 文件 下载 代码 (不使用 jsp smart upload 组件) 解决中文名 问题
- ORACLE EXP/IMP的使用详解 (解决9i(window)导入到10G的乱码问题)