java线程死锁例子及解决方法

本文通过一个简单的Java线程死锁例子解释了死锁的发生原因,即两个线程相互等待对方释放资源导致的无限期等待。为了解决这个问题,文章介绍了使用并行API中的ReentrantLock锁来替代synchronized,通过尝试获取锁并在获取所有所需锁之前进行检查,避免了死锁的发生。这种方法允许在无法避免资源交叉使用的场景下,更灵活地控制线程同步。
摘要由CSDN通过智能技术生成
Java线程死锁是由于有些资源彼此交叉取用,就有可能造成死结.
如1线程中 取得A对象的锁定后又要取得B对象的锁定.但是同时2线程中取得B对象的锁定后又要取得A对象的锁定.这两个线程同时发生时就会造成,1线程拿到A对象锁定后等待B对象的锁定.2线程拿到B对象锁定后等待A对象锁定.这样就会进入没有停止的等待中.
线程死锁的一个简单例子:
package deadLockThread;


public class Test {

private int size=0;

    public synchronized void doSome(){
size++;
    }
	
public synchronized void doTest(Test test){
try {
Thread.sleep(1000);//睡眠1秒  效果更明显
} catch (InterruptedException e) {
e.printStackTrace();
}
        test.doSome();   //另外一个对象调用synchronized 函数  需要取得该对象的对象锁定



}



}
package deadLockThread;

public class DeadLock {
	public static void main(String[] args) {

		final Test t1=new Test();
		final Test t2=new Test();
		
		Thread th1=new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TOD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值