java - Java object.wait 可以被中断吗?

标签 java multithreading

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/

相关文章:

java - Java/Scala 的特性级行为测试工具

java - 实现接口(interface)

Java,如何比较字符串和字符串数组

java - .setIconImage();到所有帧而不是一帧一帧

java - C# 版本的 mp4parser

java - 执行超时后返回的长时间计算

java - 通过多线程的并发方法

java - 从按钮调用时鼠标事件等待卡住

android - 调试未收到消息的 RxJava 问题的最佳方法是什么

Python 线程从队列获取项目 - 如何确定线程尚未调用 task_done()?