控制线程的执行顺序

2020-06-09  本文已影响0人  雪侯_edeb

在Java多线程中通常来说,在执行线程时,如果要保证线程的执行顺序,可以使用join和Executorservice

(1)对于join的作用主要时在CPU进行调度时,让主线程等待子线程执行结束后才往下继续执行

比如:

三个线程:

Thread t1 = new Thread(new Runnable(){ public void run(){}});

Thread t2 = new Thread(new Runnable(){ public void run(){}});

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

如果要保证线程执行顺序,可以使用join来进行控制(t1.join())

其实join方调用的就是Object类里的wait方法

JDK源码如下:

在运行时,mian方法就是一个主线程, 通过创建子线程,这里在创建子线程时由几个状态(新建,就绪(启动Thread时)),在调用start()方法后,线程由新建->就绪后,由CPU调度时由就绪->运行,这时通过调用t1.join()时,会让当前的线程进行等待(即当前运行的主线程进行等待),直到线程t1执行结束后再唤醒主线线程继续往下执行。

(2)使用Executorservice线程池进行操作,

ExecutorService executorService = Executors.newSingleThreadExecutor(); //创建单个线程池进行操作,这个其实就是把线程放到队列里,实现FIFO排队。

ExecutorService还有其他方法,

比如 newFixedThreadPool(); //创建固定大小的线程池

newCachedThreadPool(); //缓存线程池

上一篇下一篇

猜你喜欢

热点阅读