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