/*
死鎖就是兩個線程都被掛起,在等待區。程序終結
線程1,實現的任務,先打開鎖1,再打開鎖2
線程2,實現的任務,先打開鎖2,再打開鎖1
線程1進入鎖1,CPU切換線程2,線程2進入鎖2;掛起等待。CPU切換線程1,掛起等待。
線程1,實現的任務,先打開鎖1,再打開鎖2,打開鎖2,再打開鎖1,
線程2,實現的任務,先打開鎖1,再打開鎖2,打開鎖2,再打開鎖1,
線程1進入鎖2,CPU切換線程2,線程2進入鎖1;掛起等待。CPU切換線程1,掛起等待。
*/
class ThreadDemo
{
public static void main(String[] args)
{
//die1 die1Run = new die1();
die2 die2Run = new die2();
//new Thread(die1Run,"d1").start();
//die1Run.flag=false;
//new Thread(die1Run,"d2").start();
new Thread(die2Run,"d3").start();
new Thread(die2Run,"d4").start();
System.out.println("Hello World!");
}
}
/*
class die1 implements Runnable
{
private int num=20;
boolean flag=true;
public void run(){
if(flag){
while(true)
{
synchronized(NewThread.class){
printNum();
}
}
}else{
while(true)
{
printNum();
}
}
}
public synchronized void printNum(){
synchronized(NewThread.class){
if(num>10){
System.out.println(num-- + "--" + Thread.currentThread().getName());
}
}
}
}
*/
class die2 implements Runnable
{
private int num=10;
public void run(){
while(true)
{
synchronized(NewThread.class){
printNum();
}
printNum();
}
}
public synchronized void printNum(){
synchronized(NewThread.class){
if(num>0){
for(int i=0;i<10000;i++){}
System.out.println(num-- + "--" + Thread.currentThread().getName());
}
}
}
}
Java - 死鎖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.