Java多线程中断的问题

代码如下,为什么在中断之后将中断位清除后再进入阻塞,仍然会捕捉到中断异常?

public class InterruptDemo implements Runnable {
    public void run() {
        try {
            //中断当前线程
            Thread.currentThread().interrupt();
            boolean b = Thread.interrupted();
            System.out.println(b);  //true
            b = Thread.interrupted();
            System.out.println(b);  //false
            //进入阻塞
            Thread.currentThread().wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

1个回答

异常怎么写的????

Magical_Lemon
Magical_Lemon 回复哆啦A梦丶幻想: wait()是Object类的方法,直接调用会出现非法监视器的异常。要跟synchronized一起使用,不能独立使用,原理是synchronized代码里面的wait方法是调用该同步锁对象的wait方法。你直接调用wait方法是该对象的wait方法,该对象并不是一个锁对象,所以会出现非法监视器的异常。简单说就是wait/notify/notifyAll都是在synchronized(Object lock)中使用的,也就是默认调用lock.wait()。
8 个月之前 回复
JonathanYan
JonathanYan 回复哆啦A梦丶幻想: wait需要先notify
9 个月之前 回复
w2298119289j
哆啦A梦丶幻想 回复Magical_Lemon: 为什么不能用wait()呀?
9 个月之前 回复
Magical_Lemon
Magical_Lemon java.lang.IllegalMonitorStateException 非法监视器的异常。憨憨了我。这里是不能用wait()方法的。改为sleep()阻塞就正常了。
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐