wait()与sleep()区别、yield、join、线程终止(suspend和stop)

wait()与sleep()区别、yield、join、线程停止(suspend和stop)

wait()与sleep()区别:

1、sleep是Thread类的静态办法,是线程用来控制本身流程,让当前线程休眠一段时间。不触及线程间的通讯

2、wait是Object的办法,并且必要放到同步块中,用于线程间的通讯。wait会开释锁,并且必要notify(或notifyAll)来叫醒,不然会不休处于壅闭形态。

wait和sleep都要捕捉特别

yield:

yield也是Thread的静态办法,yield的实质就是将当前线程重新放入抢占CPU时间的”行列“中,当前线程乐意让出CPU的使用权,可以让其他线程持续实行,但是线程调治器约莫会中止当前线程持续实行,也约莫会让该线程持续实行。 并且与线程优先级并无干系,优先级高的不一定先实行。线程的优先级将该线程的紧张性转达给线程调治器,调治器将倾向于让优先权最高的线程先实行.然后这并未料味值优先权较低的线程将得不到实行。优先级较低的线程仅仅是实行的频率较低。

总结一下:

1. 线程优先级并不克不及确保线程的实行排序,优先级高的并不一定先实行,优先级低的也不一定不实行

2. 不要试图使用优先级来控制线程的实行排序

调停优先级和使用yield只是增长了线程之间切换的几率罢了。yield相当于让线程从running态——>runnable形态

join:

join是让当前线程等候调用join 的线程运转完run办法,可以指定时间,若指定了时间,则等候指定时间,即使调用join的线程没运转完run办法,当前线程也会持续往下运转;若未指定时间,则当前线程不休等候,直到join的线程运转完run办法。给出一个例子就晓得了,代码如下

package java_IO; public class joinTest { public static void main(String[] args) { Thread t=new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+" begins"); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" ends"); // TODO Auto-generated method stub } },"T"); t.start(); try { t.join(1000); if(t.isAlive()) { System.out.println("t has not finished"); } else { System.out.println("t has finished"); } System.out.println("JoinFinish"); } catch (Exception e) { // TODO: handle exception } } }

后果:

T begins

t has not finished

JoinFinish

T ends

若join未指定时间,则后果如下

停止线程

寻常直接让线程跑完run办法,它就会主动停止了,这是最好的一种办法。另有就是stop,调用stop则开释线程一切资源,但线程不一定实行完了,这种具有十分大的不确定性;另有一种就是调用suspend办法,这个办法容易形成死锁,如果该线程拿到了某个锁,suspend不会开释锁,以是这个办法也不保举。


专注于武艺抢手大数据,人工智能,JAVA、Python、 C 、GO、Javascript等言语最新弁言武艺,及业务痛点成绩分析,请眷注【编程我最懂】协同交换学习。

内容底部广告位(手机)
标签:

管理员
草根站长管理员

专注网站优化+网络营销,只做有思想的高价值网站,只提供有担当的营销服务!

上一篇:rescue(英语说文解字Rescue)
下一篇:返回列表

相关推荐