日期:2014-05-20  浏览次数:20597 次

并发线程的问题
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应该加在“票”被卖出的方法上,而非买票的线程上。
------解决方案--------------------
探讨
这个Synchronized应该加在共享代码上,是会产生资源共享的那部分代码,你写在线程里没有用,因为同步代码块没有被别的线程所共享。
在你的例子里,Synchronized应该加在“票”被卖出的方法上,而非买票的线程上。

------解决方案--------------------
1. public Object obj = new Object();
==》
private static Object obj = new Object(); //共享锁

2.synchronized 里面调用sleep容易引起死锁