商讯信箱
用户名:
@
vip.it168.com
free.it168.com
udc.it168.com
staff.it168.com
it168.com
密 码:
注册
|
忘记密码
登录
个人用户
经销商
用户名:
密 码:
注册
|
忘记密码
验证码:
看不清?
用户名:
密 码:
注册
|
忘记密码
登录
注册
返回首页
门户
|
论坛
|
Blog
|
新闻
|
文档
|
Tag
|
下载
|
搜索
|
培训
|
WiKi
|
IXPUB
|
投稿
|
专题
频道:
Oracle
|
DB2
|
SQL Server
|
ERP
|
SCM
|
Java
|
微软技术
|
开源
|
项目管理
|
SOA
|
商业智能
|
IBM软件技术
您的位置:
首页
>
技术频道
> 正文
开启JAVA死锁之迷
[
收藏此页
] [
打印
]
作者:
IT168 火星人
2007-06-21
内容导航:
什么是线程
第1页:
什么是线程
第2页:
上锁
第3页:
如何检测死锁的根源
第4页:
资源池耗尽死锁
第5页:
死锁的经验法则
引言
【IT168 专稿】
一般来说,每一种使用线程的语言中都存在线程死锁问题,Java开发中遇到线程死锁问题也是非常普遍。笔者在程序开发中就常常碰到死锁的问题,并经常束手无策。本文分享笔者在JAVA开发中对线程死锁的一些看法。
一. 什么是线程
在谈到线程死锁的时候,我们首先必须了解什么是Java线程。一个程序的进程会包含多个线程,一个线程就是运行在一个进程中的一个逻辑流。多线程允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信较进程简单。笔者的经验是编写多线程序,必须注意每个线程是否干扰了其他线程的工作。每个进程开始生命周期时都是单一线程,称为“主线程”,在某一时刻主线程会创建一个对等线程。如果主线程停滞则系统就会切换到其对等线程。和一个进程相关的线程此时会组成一个对等线程池,一个线程可以杀死其任意对等线程。
因为每个线程都能读写相同的共享数据。这样就带来了新的麻烦:由于数据共享会带来同步问题,进而会导致死锁的产生。
二. 死锁的机制
由多线程带来的性能改善是以可靠性为代价的,主要是因为有可能产生线程死锁。死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不能正常运行。简单的说就是:线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。这里举一个通俗的例子:如在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。假设这种情况一直持续下去,这样就会发生死锁现象。
导致死锁的根源在于不适当地运用“synchronized”关键词来管理线程对特定对象的访问。“synchronized”关键词的作用是,确保在某个时刻只有一个线程被允许执行特定的代码块,因此,被允许执行的线程首先必须拥有对变量或对象的排他性访问权。当线程访问对象时,线程会给对象加锁,而这个锁导致其它也想访问同一对象的线程被阻塞,直至第一个线程释放它加在对象上的锁。
Java中每个对象都有一把锁与之对应。但Java不提供单独的lock和unlock操作。下面笔者分析死锁的两个过程“上锁”和“锁死” 。
1
1
2
3
4
5
【内容导航】
第1页:
什么是线程
第2页:
上锁
第3页:
如何检测死锁的根源
第4页:
资源池耗尽死锁
第5页:
死锁的经验法则
©版权所有。未经许可,不得转载。
[责任编辑:
赵恒
]
相关文章
JSF问题多多、谁将为JSF画龙点睛
浅谈Hibernate的学习经验
初出茅庐我的测试工程师之路
Jacks:Java兼容性测试,开放源码之路
“世界应用服务器圆桌会议”将在广州举行
怀抱梦想的中国软件人在冰川中前行
Java也玩内存泄漏?
Ajax兴起, 传统Web框架与狼共舞
应用服务器之江湖兵器谱
再读Think in Java-高级篇
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
CopyRight 1999-2006 itpub.net All Right Reserved. E-mail:Webmaster@itpub.net
北京皓辰广域网络信息技术有限公司. 版权所有
京ICP证:010037号
联系我们
法律顾问