java线程间通信(wait、notfiy)

Thread1中使用wait语句,等待Thread2执行完notify之后,并将synchronized语句块执行完,释放锁之后,Thread1得到重新执行的机会,接着执行下去。

public class Thread1 extends Thread {

    private Object lock;

    public Thread1(Object lock) {

        super();

        this.lock = lock;

    }

    @Override

    public void run() {

        try {

        synchronized (lock) {

        System.out.println("wait start=" + System.currentTimeMillis());

        lock.wait();

        System.out.println("wait end=" + System.currentTimeMillis());

        }

        } catch (InterruptedException e){

        e.printStackTrace();

        }

    }

}

public class Thread2 extends Thread {

    private Object lock;

    public Thread2(Object lock) {

        super();

        this.lock = lock;

    }

    @Override

    public void run() {

        try {

        synchronized (lock) {

        System.out.println("notify start=" + System.currentTimeMillis());

        lock.notify();

        System.out.println("notify end=" + System.currentTimeMillis());

        }

        } catch (InterruptedException e){

        e.printStackTrace();

        }

    }

}

public class Test {

public static void main(String[] args) {

try {

Object lock = new Object();

Thread1 t1 = new Thread1(lock);

t1.start();

Thread2 t2 = new Thread2(lock);

t2.start();

} catch(InterruptedException e) {

e.printStackTrace();

}

}

}

打印结果:

wait start=……

notify start=……

notify end=……

wait end=……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章来源:http://www.54tianzhisheng.cn/2017/06/04/Java-Thread/...
    beneke阅读 5,427评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,186评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,060评论 1 18
  • 来莲心工作20多天了,这里的工作环境是以前一直很向往的,如今梦想慢慢的实现了,在这古色古香的茶坊里,有一群活波可爱...
    简安胡同阅读 832评论 0 0