- Java code
import java.util.concurrent.TimeUnit;public class Test { public Object obj = new Object(); class T extends Thread{ public T(){} public void run(){ try{ while(true){ synchronized(obj){ if(...){ doSomeThing1(); TimeUnit.SECONDS.sleep(1); }else{ doSomeThing2(); TimeUnit.SECONDS.sleep(1); } } } }catch(Exception e){ e.printStackTrace(); } } }}
代码的模型大致如上,当运行多个线程时,有少数情况会出现共享资源出错的问题,不知道上面的同步方法有什么问题,,求教大家
------解决方案--------------------
这个Synchronized应该加在共享代码上,是会产生资源共享的那部分代码,你写在线程里没有用,因为同步代码块没有被别的线程所共享。
在你的例子里,Synchronized应该加在“票”被卖出的方法上,而非买票的线程上。
------解决方案--------------------
------解决方案--------------------
1. public Object obj = new Object();
==》
private static Object obj = new Object(); //共享锁
2.synchronized 里面调用sleep容易引起死锁