java多线程基础(2)-调度方式之暂停当前线程方式1-阻塞
2016-07-07 10:17
477 查看
线程阻塞
任何时候线程必须停下来等待它没有的资源时,这个时候线程就会发生阻塞。
要让网络程序中的线程自己放弃cpu控制权,最常见的方式就是对io阻塞。
由于cpu比网络和磁盘快得多,网络程序经常会在等待数据从网络到达或向网络发送数据时发生阻塞现象。即使只阻塞几毫秒,这一点时间也足够其他线程用来完成一些重要的任务。
线程在进入一个同步(synchronized)的方法或代码块时也会阻塞。㘝这个线程没有所同步对象的锁,而其他线程同步拥有这个锁,这个线程就会暂停,知道锁被释放为止,如果这个锁永远不释放,那么这个线程就会永远的停止,也就是发生了死锁。
无论是io阻塞还是锁阻塞,都不会释放线程已经拥有的锁。对于io阻塞,这不是个大问题,因为无非有两种情况:最后io终将不再阻塞或者将抛出一个ioexception异常,然后线程退出这个同步块或方法,并释放他的锁。不过,如果一个线程由于没得到一个锁而阻塞,将永远不会放弃自己已经拥有的锁,则有可能导致死锁线程。
任何时候线程必须停下来等待它没有的资源时,这个时候线程就会发生阻塞。
要让网络程序中的线程自己放弃cpu控制权,最常见的方式就是对io阻塞。
由于cpu比网络和磁盘快得多,网络程序经常会在等待数据从网络到达或向网络发送数据时发生阻塞现象。即使只阻塞几毫秒,这一点时间也足够其他线程用来完成一些重要的任务。
线程在进入一个同步(synchronized)的方法或代码块时也会阻塞。㘝这个线程没有所同步对象的锁,而其他线程同步拥有这个锁,这个线程就会暂停,知道锁被释放为止,如果这个锁永远不释放,那么这个线程就会永远的停止,也就是发生了死锁。
无论是io阻塞还是锁阻塞,都不会释放线程已经拥有的锁。对于io阻塞,这不是个大问题,因为无非有两种情况:最后io终将不再阻塞或者将抛出一个ioexception异常,然后线程退出这个同步块或方法,并释放他的锁。不过,如果一个线程由于没得到一个锁而阻塞,将永远不会放弃自己已经拥有的锁,则有可能导致死锁线程。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Python3写爬虫(四)多线程实现数据爬取
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序