开发者学堂课程【Java 高级编程:线程死锁】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/292
线程死锁
死锁
死锁是在进行多线程同步的处理之中有可能产生的一种问题,所谓的死锁指的是若干个线程彼此互相等待的状态。
下面通过简单的代码来观察一下死锁的表现形式但是对于此代码不作为重点。
范例:死锁的展示
package cn.mldn.demo;
class MyThread implements Runnable i
private int ticket = 10 ; l/总票数为1日张public synchrbnized boolean sale() {
if (this.ticket > ) {
try {
Thread.sleep( 100); //模拟网络延迟
}catch ( InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread( ).getName() +“卖票,ticket = " + this.ticket --);
return true ;
}else {
System.out.println("*****票已经卖光了*****");
return false ;
}
}
@override
public void run() {
while (this.sale()) {
;
}
}
package cn.mldn. demo;
class ian {
public synchronized void say (xiaoQiang xq) {
system.out.println("阿健说:此路是我开,要想从此过,留下10块钱。");
}
public synchronized void get() i
system.out.println("阿健说。得到了10块钱,可以买饭吃了,于是让出了路。");
class xiaoQiang {
public synchronized void say ( ian jj) {
system.out.print1n( "小强说:让我先跑,我再给你钱。");
}
public synchronized void get() {
System.out.println( "小强说:逃过了一劫,可以继续送快餐了。");
public class DeadLock implements Runnable k
@override
public void run( ) {
//TODO Auto-generated method stub
}
}
现在死锁造成的主要原因是因为彼此都在互相等待着,等待着对方先让出资源。
死锁实际上是一种开发中出现的不确定的状态,有的时候代码如果处理不当则会不定期出现死锁,这是属于正常开发中的调试问题。
若干个线程访问同一资源时一定要进行同步处理,而过多的同步会造成死锁。