当前位置: 代码迷 >> J2SE >> 并发线程的有关问题
  详细解决方案

并发线程的有关问题

热度:167   发布时间:2016-04-24 00:39:34.0
并发线程的问题
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容易引起死锁
  相关解决方案