首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

并发线程的有关问题

2012-07-26 
并发线程的问题Java codeimport java.util.concurrent.TimeUnitpublic class Test {public Object obj

并发线程的问题

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容易引起死锁

热点排行
Bad Request.