wait 执行后自动释放锁,notify执行不释放锁

阅读: 评论:0

wait 执行后自动释放锁,notify执行不释放锁

wait 执行后自动释放锁,notify执行不释放锁

wait 执行后自动释放锁

  1. 当wait在锁里面时,执行到wait之后 锁会被释放
  2. 当notify在锁里面时,执行到notify 时wait被唤醒,但是线程不释放锁

测试代码如下:

package com.chapter03;class Service02 {public void testMethod(Object lock) {try {synchronized (lock) {System.out.println("begin wait");lock.wait();System.out.println("end wait");}} catch (InterruptedException e) {e.printStackTrace();}}}class ThreadA extends Thread {private Object lock;public ThreadA(Object lock) {this.lock = lock;}@Overridepublic void run() {Service02 service02 = new Service02();stMethod(lock);}
}class ThreadB extends Thread {private Object lock;public ThreadB(Object lock) {this.lock = lock;}@Overridepublic void run() {Service02 service02 = new Service02();stMethod(lock);}
}public class StudyThreads02释放锁与不释放锁 {public static void main(String[] args) {Object lock = new Object();ThreadA threadA = new ThreadA(lock);ThreadB threadB = new ThreadB(lock);threadA.start();threadB.start();}
}

执行结果: 执行到wait之后 锁被释放,线程B拿到锁开始执行直到wait 继续等待。

notify执行不释放锁

  1. 执行到notify之后唤醒相应线程,但是本线程不会释放锁,直到执行完毕才会释放锁

wait状态时候执行 interrupt

  1. 当线程处于wait状态时候,执行interrupt方法程序会出现InterruptedException异常

释放锁的几个条件

  1. 同步代码块执行完毕,释放锁
  2. 执行同步代码块遇到异常导致线程终止,释放锁
  3. 执行同步代码块

本文发布于:2024-02-04 23:35:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718936760778.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:wait   notify
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23