java多线程简单案例入门(三)
2014-11-23 23:13:29
·
作者:
·
浏览: 2
synchronized (this) {
while(tickets>0){
//线程休眠10毫秒,模拟出线程不安全的情况出现。不加sleep()也是线程不安全的,加了sleep()则不安全的结果会更容易出现。
try{Thread.sleep(10);}catch(Exception e){e.printStackTrace();};
System.out.println("run():"+Thread.currentThread().getName()+"is saling ticket "+tickets--);
}
}
}
}
public synchronized void sale(){
while(tickets>0){
//线程休眠10毫秒,模拟出线程不安全的情况出现。不加sleep()也是线程不安全的,加了sleep()则不安全的结果会更容易出现。
// try{Thread.sleep(10);}catch(Exception e){e.printStackTrace();};
System.out.print("sale-");
System.out.println("run():"+Thread.currentThread().getName()+"is saling ticket "+tickets--);
}
}
}
注意:让同步代码块 和 同步函数同步 的方法:让他们共用一个监视器。本例中共同的监视器是this对象,不能是str。因为同步函数的监视器是this对象,所以必须是的同步代码块的监视器也为this对象。synchronized (this) 是正确的,若写成 synchronized(str) ,则同步代码块和同步函数不能同步。
参考:http://www.iqiyi.com/w_19rr799759.
html