本帖最后由 乔青山 于 2014-3-2 14:48 编辑
class Ticket implements Runnable
{
private int tick = 100;
Object obj = new Object();
boolean flag = true;
public void run(){
if(flag){
while(true){
synchronized(obj){ //obj锁
show();
}
}
}else{
while(true)
show();
}
}
public synchronized void show(){ //this锁
synchronized(obj){ //obj锁
if(tick>0){
try{
Thread.sleep(10);
}catch(Exception e){
}
System.out.println(Thread.currentThread().getName()+"code.........:"+tick--);
}
}
}
}
class DeadLockDemo
{
public static void main(String[] args){
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
t.flag = false;
t2.start();
}
}
我想问一下,什么情况下是this锁,函数上的锁就一定是this锁是么?代码块的锁呢?
另外上面的程序会出现死锁,为什么?t1和t2都在调用show(),那t1执行show的时候t2应该执行不了啊,锁应该锁上了啊,怎么会出现死锁呢?
本人菜鸟,线程同步这个地方学的很吃力,锁有点完全不理解了,希望讲解的能详细一点
|