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();
}
}
}
}代码的模型大致如上,当运行多个线程时,有少数情况会出现共享资源出错的问题,不知道上面的同步方法有什么问题,,求教大家

解决方案 »

  1.   

    这个Synchronized应该加在共享代码上,是会产生资源共享的那部分代码,你写在线程里没有用,因为同步代码块没有被别的线程所共享。
    在你的例子里,Synchronized应该加在“票”被卖出的方法上,而非买票的线程上。
      

  2.   

    1. public Object obj = new Object();
    ==》
      private static Object obj = new Object(); //共享锁2.synchronized 里面调用sleep容易引起死锁