zoukankan      html  css  js  c++  java
  • Java并发:join与wait

      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方法可以继续执行。

  • 相关阅读:
    English,The Da Vinci Code, Chapter 23
    python,meatobject
    English,The Da Vinci Code, Chapter 22
    English,The Da Vinci Code, Chapter 21
    English,The Da Vinci Code, Chapter 20
    English,The Da Vinci Code, Chapter 19
    python,xml,ELement Tree
    English,The Da Vinci Code, Chapter 18
    English,The Da Vinci Code, Chapter 17
    English,The Da Vinci Code, Chapter 16
  • 原文地址:https://www.cnblogs.com/junlu/p/12466500.html
Copyright © 2011-2022 走看看