如何让AB两个线程依次执行?
对于线程串行的问题,Java提供了几个方案可供选择。先定义A、B两个线程:
方案一:使用Thread类的join方法Thread的join方法是指阻塞主线程,让当前线程执行完再让CPU时间片执行主线程。那么上面定义的A、B两个线程需要让A执行完之后再执行B,只需要A.join()即可。如下:
A.start();
try {
A.join(3000); //这里填写的超时时间可以省略,具体意义可自行查询。也可使用A.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
B.start();
方案二:使用Executors来做任务调度同样针对上述定义的A、B两个线程,需要在A执行完之后再执行B,线程不错乱,使用Executors类的静态方法new一个单线程的队列出来,将A、B两个任务放进去一次执行。具体代码如下:
ExecutorService exeService = Executors.newSingleThreadExecutor();
exeService.submit(A);
exeService.submit(B);
exeService.shutdown();
方案二比方案一要优雅。而且根据join方法的底层实现,使用了Thread的wait的native方法来执行等待,所以原则上也可以使用Thread的wait方法来执行等待以此实现A、B线程的依次执行。但Java官方不建议使用wait、notify方法,就遵循官方规范吧。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有