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

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 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站