java中yield()和join()的用法


在java的多线程编程中,有可能会用到yield和join。在具体讲解yield和join之前,我们先来看看java中线程的优先权。

线程的优先级:

1.在没有指定线程的优先级的时候,线程都带有普通的优先级。

2.线程的优先级可以分为1到10;10代表最高的优先级,1代表最低的优先级,普通优先级是5.

3.优先级最高的线程在运行时给予优先,但不能保证线程启动后立刻就进入运行状态。

4。与线程池中等待的线程相比,正在运行的线程拥有更高的优先级。

5.由调度程序来决定执行哪一个线程。

6.用setProperty()来设定用线程的优先级。

7.在线程的start方法调用之前,应该指定线程的优先级。

下面我们来看看yield方法:

yield的意思是放弃,投降的意思。当前线程调用yield的时候,告诉虚拟机它愿意让其他的线程抢占自己的位置。者表明该线程没有紧急的事要做,但这只是一种暗示,并不能保证一定会发生。

使用yield方法时要注意的几点:

1.yield是一个静态的本地方法(native)

2.调用yield后,yield告诉当前线程把运行机会交给线程池中有相同优先级的线程。

3.yield不能保证,当前线程迅速从运行状态切换到就绪状态。

4.yield只能是将当前线程从运行状态转换到就绪状态,而不能是等待或者阻塞状态。

join方法:

线程实例的join()方法可以被用来join到线程执行的开始和其他线程执行的结束,所以直到其他线程运行结束这个线程才会执行。如果join的方法在线程实例中被调用,当前运行的线程会被堵塞,直到线程实例运行完成。

如中线程a中调用线程b的join方法,这时线程a就会进入阻塞状态,直到线程b执行完成。这样就可以使并行的线程串行化的执行。


原文链接:https://blog.csdn.net/hust_yfang/article/details/79603032