首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多线程案例:死锁场景一

当两个线程或者多个线程互相锁定的情况就叫死锁

避免死锁的原则

解决死锁的基本方法:

当两个线程或线程者多个互相锁定时就形成了死锁。【使用Synchronized关键字 加锁的时候,要避免死锁的发生。】

避免死锁的原则:

• 顺序上锁,反向解锁。

注意:

切记尽量不要使用同步代码块的嵌套!

JAVA线程的API中很多过时方法都构成了死锁,因此不能调用。

*/

public class DeadLock {

public static void main(String[] args) {

Object o1 = new Object();

Object o2 = new Object();

// t1和t2两个线程共享o1,o2

Thread t1 = new MyThread1(o1,o2);

Thread t2 = new MyThread2(o1,o2);

t1.start();

t2.start();

}

}

class MyThread1 extends Thread{

Object o1;

Object o2;

public MyThread1(Object o1,Object o2){

this.o1 = o1;

this.o2 = o2;

}

public void run(){

synchronized (o1){

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o2){

}

}

}

}

class MyThread2 extends Thread {

Object o1;

Object o2;

public MyThread2(Object o1,Object o2){

this.o1 = o1;

this.o2 = o2;

}

public void run(){

synchronized (o2){

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o1){

}

}

}

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OS1zoq2AHZ7gjhX_jb6pBEgw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券