前往顾页
以后地位: 主页 > 收集编程 > Jsp实例教程 >

Java多线程sleep(),join(),interrupt(),wait(),notify()利用教程

时候:2011-05-24 10:42来源:知行网www.zhixing123.cn 编辑:麦田守望者

1. sleep() & interrupt()
线程A正在利用sleep()停息着: Thread.sleep(100000);
如果要打消他的等候状况,可以在正在履行的线程里(比如这里是B)调用
a.interrupt();
令线程A放弃就寝操纵,这里a是线程A对应到的Thread实例
履行interrupt()时,其实不需求获得Thread实例的锁定.任何线程在任甚么时候刻,都可以调用其他线程interrupt().当sleep中的线程被调用interrupt()时,就会放弃停息的状况.并抛出InterruptedException.丢出异常的,是A线程.

2. wait() & interrupt()
线程A调用了wait()进入了等候状况,也能够用interrupt()打消.
不过这时候辰要小心锁定的问题.线程在进入等候区,会把锁定消弭,当对等候中的线程调用interrupt()时(重视是等候的线程调用其本身的interrupt()),会先从头获得锁定,再抛出异常.在获得锁定之前,是无法抛出异常的.

3. join() & interrupt()
当线程以join()等候其他线程结束时,一样可利用interrupt()打消之.因为调用join()不需求获得锁定,故与sleep()时一样,会顿时跳到catch块里. 重视是随调用interrupt()体例,必然是梗阻的线程来调用其本身的interrupt体例.如在线程a中调用来线程t.join().则a会等t履行完后在履行t.join后的代码,当在线程b中调用来a.interrupt()体例,则会抛出InterruptedException

4. interrupt()只是改变间断状况罢了
interrupt()不会间断一个正在运行的线程。这一体例实际上完成的是,在线程遭到梗阻时抛出一个间断旌旗灯号,如许线程就得以加入梗阻的状况。更切当的说,如果线程被Object.wait, Thread.join和Thread.sleep三种体例之一梗阻,那么,它将领遭到一个间断异常(InterruptedException),从而延迟地闭幕被梗阻状况。
如果线程没有被梗阻,这时候调用interrupt()将不起感化;不然,线程就将获得异常(该线程必须事前预备好措置此状况),接着逃离梗阻状况。
线程A在履行sleep,wait,join时,线程B调用A的interrupt体例,的确这一个时候A会有InterruptedException异常抛出来.但这实际上是在sleep,wait,join这些体例外部会不竭查抄间断状况的值,而本身抛出的InterruptedException。
如果线程A正在履行一些指定的操纵时如赋值,for,while,if,调用体例等,都不会去查抄间断状况,所以线程A不会抛出InterruptedException,而会一向履行着本身的操纵.当线程A终究履行到wait(),sleep(),join()时,才顿时会抛出InterruptedException.
若没有调用sleep(),wait(),join()这些体例,或是没有在线程里本身查抄间断状况本身抛出InterruptedException的话,那InterruptedException是不会被抛出来的.

趁便加个与Thread.sleep()不异结果的代码:
public static void amethod(long x) throws InterruptedExcetion{
if (x != 0) {
Object o = new Object();
synchronized (o) {
o.wait(x);
}
}
}

顶一下
(1)
50%
踩一下
(1)
50%
------分开线----------------------------
标签(Tag):Java JAVA实例教程 JAVA根本教程 Java源代码
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣