线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)
来源:互联网 发布:淘宝超级会员能干什么 编辑:程序博客网 时间:2024/05/23 01:13
线程并发学习
线程并发学习—-核心概念(转载)
线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)
线程并发学习—-线程阻塞(synchronized)
线程并发学习—-线程阻塞(lock)
线程并发学习—-Thread、Runnable、Callable
线程并发学习—-队列(Queue)
spring学习—-线程池
java中一些锁概念整理(转载)
比较
- 两者来自不同的类(分别是Thread和Object)
- sleep方法没有释放锁;而wait方法释放了锁,使得其他线程可以使用同步控制块或方法
- wiat只能在同步控制方法或者同步控制块使用,而sleep可以在任何地方使用
- sleep必须捕获异常,而wait不需要
- notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级
- notifyAll()则能唤醒全部等待线程
- join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B
示例
public class WaitDemo { public static void main(String[] args) { WaitDemo waitDemo = new WaitDemo(); new Thread(new Runnable() { @Override public void run() { waitDemo.getA(); } }).start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { waitDemo.getB(); } }).start(); } public synchronized void getA() { System.out.println("get A....."); try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end A"); } public synchronized void getB() { System.out.println("get B....."); try { Thread.sleep(3000); notify(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end B"); }}
结果
get A.....get B.....end Bend A
从结果可以看出线程a先获取到 锁,getA方法调用wait方法释放锁,getB使用sleep休眠3秒,但并不释放锁,然后使用notify唤醒等待线程
参考资料
https://www.cnblogs.com/royi123/archive/2013/06/01/3113198.html
阅读全文
0 0
- 线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)
- Java 线程协作 wait,notify,notifyAll,Sleep,Join,Condition
- java 线程:sleep join yield | wait notify notifyAll
- 线程sleep、wait、yield、join、notify、notifyAll 以及queue
- java线程sleep join yield wait notify notifyAll
- Java多线程笔记三(线程通信wait/notify/notifyAll/sleep/yield/join)
- Java并发——线程间协作(wait、notify、sleep、yield、join)
- 并发编程<一>线程5大状态切换时机分析及sleep,join,wait,notify,notifyAll,yield剖析
- Java线程_wait,sleep,notify,notifyall,join
- wait, sleep, notify, notifyall, join
- java中线程阻塞之sleep、suspend、join、wait、resume、notify方法解析(一)
- 线程wait-notify-notifyAll
- 线程中的一些常用方法的用法 join()、yield()、sleep()、wait()、notify()、notifyAll()
- Java 线程中的Join、wait、notify,sleep
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) (r)
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)(转)
- java 线程的状态分析 sleep yield join wait notify notifyall
- java关于线程的sleep(),yield(),join(),wait(),notify(),notifyAll()等方法的总结
- 小朋友学C++(13):引用
- checkpoint执行太频繁导致数据库日志报错
- 静态注册JNI和动态注册JNI
- 2017深度学习NLP进展与趋势
- 小朋友学C++(14):两数交换
- 线程并发学习—-线程阻塞(sleep、wait、notifyAll、notify、join)
- Https单向认证和双向认证
- linux运维学习
- 【scala 代码片段2】轻松入门scala--列表的操作以及集合元素映射
- SQL相关知识
- 小朋友学C++(15):多继承
- 手把手教你如何判断 Linux 服务器是否被入侵
- 从0开始用react构建音乐播放器
- 当程序员遇见「佛系」,会发生什么?