首页 > 编程语言 > 详细

Java并发:join与wait

时间:2020-03-11 23:50:14      阅读:90      评论:0      收藏:0      [点我收藏+]

  Thread.join中使用Object.wait实现:

  //java.lang.Thread

    public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }

  wait方法,jdk文档中的解释时:Causes the current thread to wait ,wait方法会让当前线程从runnable变成waitting的状态。怎么理解这句话呢?首先每个对象都可以作为一个锁,wait方法是根类Object的方法,每个对象都有其wait方法,在main方法中执行如下代码:

public class Program{
    public static void main(String[] args) throws Exception{
        MyThread myThread = new Thread(new Runnable(){
            @Override
            public void run() {
                //this就是当前对象myThread,同步获取到myThread锁
                synchronized (this) {
                    this.notify();//唤醒在myThread锁上等待的单个线程。即main主线程从waitting变成runnable,main方法继续执行
                }
            }
        });
        myThread.setName("myThread");
        myThread.start();
        //同步获取到myThread锁
        synchronized (myThread) {
            //使当前线程(main)从runnable进入waitting状态,等待其他某个线程调用myThread锁的 notify方法
            myThread.wait();
        }
}

  myThread对象就是一个锁,main方法synchronized (myThread)获取到锁,并执行该锁的wait方法,使main线程一直等待,当线程MyThread中获取同一个锁,并执行该锁的notify方法,使之前因该锁等待main方法可以继续执行。

Java并发:join与wait

原文:https://www.cnblogs.com/junlu/p/12466500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!