Java的notify机制_实例深入理解Java wait/notify执行机制

Java wait/notify

wait 使得获取到同步锁的线程在调用wait方法的时候暂停执行,让出cpu的时间片

notify 通知获取同步锁的线程在获取到cpu的时间片后继续执行

代码案例分析:

public class MyClass {

public static void main(String[] args) {

//同步对象

Object lock = new Object();

Thread1 thread1 = new Thread1(lock);

thread1.setName("Thread1");

thread1.start();

//执行sleep()方式,尝试让thread1执行完毕,但是thread1在调用wait方式后就会暂停执行

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//启动执行notify的线程,让执行notify操作

Thread2 thread2 = new Thread2(lock);

thread2.setName("Thread2");

thread2.start();

}

}

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();//当前线程暂停执行,等待其他现在执行notify或者notifyall操作,然后继续执行。

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

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

class Thread2 extends Thread {

private Object lock;

public Thread2(Object lock) {

super();

this.lock = lock;

}

@Override

public void run() {

synchronized (lock) {

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

//执行notify操作让处于wait的线程,继续执行后面的逻辑。

lock.notify();

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

}

}

}

执行结果: wait start== 1469078090375——–Thread1 执行run方法到lock.wait()的时候,就暂停了 notify start== 1469078093376——–Thread2 执行run方法到lock.wait()的时候,就暂停了 notify end== 1469078093376——–Thread2继续执行 wait end== 1469078093376——–Thread1收到Thread2的notify通知,然后继续执行下面的代码,结束线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值