Java文档中说中断函数可以中断object.wait
。但在我的测试中,在windows中是可以的,可以中断,但是在Linux中是错误的,不能中断。
原因似乎是从 Glibc 2.1.3 开始,pthread_cond_wait 无法再被系统信号中断。
我的理解正确吗?
public static void main(String[] args)
{
Thread t = new Thread()
{
public void run()
{
Object obj = new Object();
synchronized(obj) {
try {
obj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("interrupted");
e.printStackTrace();
}
}
}
};
t.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.interrupt();
System.out.println("interrupt is called");
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
最佳答案
Java API 规定等待线程可以被另一个线程中断。 Java API 始终是正确的。所有 JVM 实现都必须遵守其规定。
关于java - Java object.wait 可以被中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399247/