/*
死锁就是两个线程都被挂起,在等待区。程序终结
线程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());
}
}
}
}