Java并发学习笔记(11)阻塞线程
来源:互联网 发布:数据流程图编辑手机版 编辑:程序博客网 时间:2024/05/17 03:17
阻塞指的是暂停一个线程的执行以等待某个条件发生.java实现阻塞的方式如下几种:
(1) 调用Thread.sleep()方法它已毫秒作为单位让该线程睡眠一段时间,到时间后会自行唤起线程.也可以使用TimeUnit.XX.sleep() XX是TimeUnit的常量代表休眠的时间单位具体查看JDK即可.
(2) 使用Thread的suspend() 和 resume() 方法 不过使用suspend方法会引起死锁,所以该方式已过时不介意使用
(3) 使用Thread的静态方法yield()方法.该方法会暂停当前线程,并且执行其他线程.但是注意.yield方法只是给cpu一种建议,这种建议就是我已经完成我总重要的方法了.可以执行其他线程了.但是注意CPU可不会100%听取这种建议
(4) 调用Object的wait() 和 notify()/notfyAll() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。 对wait和notify/notifyAll方法调用必须在synchronized方法或synchronized块中调用.调用如果不在synchronized方法内调用会抛出IllegalMonitorStateException运行时异常
a) wait的可以做为一种条件-等待,当条件不满足时挂起线程:
i. 永远设置一个条件
ii. 永远在执行wait前先检查条件是否符合(条件使用在while中比较合适每次使用notify通知挂起线程继续执行前再检查一遍条件会)
iii.永远在循环中调用wait(while最佳)
iv. 构成条件的变量都是被锁保护的
b) 使用wait挂起的线程会形成一个等待队列,当使用notify会按挂起的顺序来唤起线程,使用notifyAll会使得线程以常规方式获取锁,synchronized是非公平的.
(5) 任务在等待某个输入输出完成.
(6) 任务试图在某个对象上调用同步方法(synchronized)但是对象锁不可用.
- Java并发学习笔记(11)阻塞线程
- 线程并发学习----线程阻塞(synchronized)
- 线程并发学习----线程阻塞(lock)
- Java并发学习笔记(16)守护线程,线程组
- java 多线程学习笔记之 线程实现(线程阻塞)
- (十四)java并发编程--线程的阻塞
- Java并发学习笔记(1) 线程与进程
- Java并发学习笔记(3)线程池的配置
- Java并发学习笔记(7)线程的同步 (锁)
- Java并发学习笔记(10)线程同步容器
- 黑马程序员Java学习笔记之多线程(并发)
- Java并发学习笔记(1) 线程与进程
- Java学习笔记(十七)泛型及并发线程
- Java并发编程实战学习笔记(一)-线程安全性
- Java并发编程实战学习笔记(三)-线程封闭
- java学习笔记之线程并发库
- 你不知道的Java学习笔记22-- 线程阻塞(线程休眠)方法
- Java线程学习笔记之BlockingQueue阻塞队列
- Testing the Security of Virtual Data Centers
- Ext.Grid详解
- C++学习第9篇---类和类的封装
- C# 字符转ASCII码,ASCII码转字符
- 压力测试工具集合【ab,webbench,Siege,http_load,Web Application Stress】
- Java并发学习笔记(11)阻塞线程
- webkit 资源
- makefile 模板
- CF内存管理规
- LayerManager
- mvc.net 实现对Controller层的单元测试
- ArrayList Vector LinkedList
- C# 简单的ZEBRA标签打印程序
- PowerDesigner导入SQL生成数据模型