tongyiwzh 2016-09-08 02:50 采纳率: 0%
浏览 1683

Java中线程wait是如何实现微秒级别识别外界的唤醒动作的

一直以来都惊奇于java是如何实现微秒级别唤醒一个处于wait状态的线程的,今天我通过下面的
程序测试了一下,主线程从调用 notify 到唤醒一个处于 wait 状态的子线程,之间的时间间隔小
于7微秒,这是一个非常短的时间,想知道java在这方面的底层实现原理是什么,有没有其他类似的
的工具也能实现这种耗时非常短的协调交互功能?
为什么想了解这个呢,因为我最近想做个在分布式环境下线程互相协调的工具,其中一个基础功
能需要让一个线程能尽快识别其他线程对临界资源的更新,因为不再是单JVM环境了,所以无法使用线程临界区的 notify, wait 机制快速唤醒另外一个等待的线程了,在分布式环境下,希望一个处于等待状态的线程通过自旋等待的方式尽快识别临界区资源的变动,用 while + sleep 方式还是延迟太大了,希望能从 wait + notify 的实现原理中找下思路,或者各位有更好的推荐方案也行。

下面是我测试 wait , notify 时间间隔的代码,有兴趣的可以看下:

public class TestThreadWait {
public static void main(String[] args) {
Object lock = new Object();
T1 thread = new T1(lock);
thread.start();

    try {
        Thread.sleep(500);
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }

    long time1 = 0l;
    long time2 = 0l;
    synchronized(lock) {
        time1 = System.nanoTime();
        lock.notify();
        time2 = System.nanoTime();
    }
    System.out.println("main thread notify time info : time1 = " + time1 + ", time2 = " + time2 + ", cost : " + (time2-time1));
}

static class T1 extends Thread {
    private Object lock;

    public T1(Object lock) {
        this.lock = lock;
    }

    public void run() {
        long time1 = 0l;
        long time2 = 0l;
        synchronized(this.lock) {
            try {
                time1 = System.nanoTime();
                this.lock.wait();
                time2 = System.nanoTime();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("thread wait time info : time1 = " + time1 + ", time2 = " + time2 + ", cost : " + (time2-time1));
    }
}

}

  • 写回答

3条回答 默认 最新

  • tongyiwzh 2016-09-08 05:46
    关注

    没人对这个有兴趣吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)