关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Java高并发:join与wait

发布时间:2020-03-12 00:00:00

  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方式能够 执行。


/template/Home/Zkeys/PC/Static