java中按顺序执行两个线程的方法
2017-02-11 16:37
323 查看
比如有线程A和B,在A执行完成后B再开始执行
在线程A run方法最后启动线程B - -
共享一个volatile boolean类型的标识变量,B一直检查该变量的值,而A则在执行完成后改变A的值
使用中断机制,和上面的方式差不多,B一直检查
使用Object.wait()和notify()方法,共享一个对象obj,线程B 首先obj.wait(),线程A执行完成后obj.notify(),唤醒线程B
使用join()方法,线程B一开始调用threadA.join(),等待线程A执行完成之后此方法才会返回,然后开始执行。
共享一个CountDownLatch,
使用栅栏,这个不太直观,就是用一个CyclicBarrier(1,new B()),当A执行完成后,调用barrier.await()。
通过线程池执行一个Callable或Thread执行一个FutureTask,拿到一个Future,调用future的get()方法,此方法会阻塞,直到返回线程执行完毕,具体用法见 http://blog.csdn.net/joenqc/article/details/76333935
使用Executors.newSingleThreadExecutor,顺序提交两个任务
暂时就想到这么多了,欢迎补充。
在线程A run方法最后启动线程B - -
共享一个volatile boolean类型的标识变量,B一直检查该变量的值,而A则在执行完成后改变A的值
使用中断机制,和上面的方式差不多,B一直检查
Thread.currentThread().isInterrupted(),而A则在执行完成过后中断B
threadB.interrupt()
使用Object.wait()和notify()方法,共享一个对象obj,线程B 首先obj.wait(),线程A执行完成后obj.notify(),唤醒线程B
使用join()方法,线程B一开始调用threadA.join(),等待线程A执行完成之后此方法才会返回,然后开始执行。
共享一个CountDownLatch,
CountDownLatch c = new CountDownLatch(1)B 开始调用 c.await(),A在执行完成后调用c.countDown(),当c中计数器为0时,await()方法不再阻塞。
使用栅栏,这个不太直观,就是用一个CyclicBarrier(1,new B()),当A执行完成后,调用barrier.await()。
通过线程池执行一个Callable或Thread执行一个FutureTask,拿到一个Future,调用future的get()方法,此方法会阻塞,直到返回线程执行完毕,具体用法见 http://blog.csdn.net/joenqc/article/details/76333935
使用Executors.newSingleThreadExecutor,顺序提交两个任务
暂时就想到这么多了,欢迎补充。
相关文章推荐
- java的join和yield方法处理线程顺序执行
- Java 多线程实现的三种方法,附两个线程执行不同的输出
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- java中控制线程间执行顺序的方法
- Java 多线程 (PART VII) 使用join()方法保证线程的执行顺序
- Java创建线程的两个方法
- Java多线程系列四——控制线程执行顺序
- java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)
- Java创建线程的两个方法
- java使用CountDownLatch实现线程顺序执行
- java使用CountDownLatch实现线程顺序执行
- java静态代码块、初始化块和构造方法的执行顺序
- java中停止线程执行的方法
- Java中静态代码块以及构造方法等执行顺序
- [置顶] Java中静态代码块、非静态代码块、构造方法三者的执行顺序
- Java静态代码块、构造代码块、构造方法的执行顺序
- Java中一个类里面有两个用synchronized修饰的非静态方法,不同的线程中的实例访问这两个方法时会发生什么?
- java静态代码块 构造代码块 构造方法的执行顺序及注意问题
- java程序中方法执行的前后顺序