51,411
社区成员
发帖
与我相关
我的任务
分享
class Test{
private Lock lock;
int getState(){
lock.lock();
return state;
}
public int method(){
}
}
class ThreadTest implements Runnable{
private Test test = new Test();
public void Run(){
while(true)
if(test.getState()){ //是否是线程安全的?获取状态
test.method();
}
}
}
private ThreadTest threadtest = new ThreadTest;
ThreadPoolExecuter.execute(threadtest);//同时执行两次
ThreadPoolExecuter.execute(threadtest);//执行两次
上面是伪代码,因为项目庞大未经验证,只是想看看这个是不是线程安全的,加锁放在了test.getState里面,不知道这个写法对不对,或者说这种判断有没有原则呢
你的伪代码写的有问题, 不能帮你i判断
建议你看看你的代码判断
1)多个线程是否是使用同一个对象的LOCK
2)LOCK状态处理是否正确,lock.lock,lock.trylock, lock.unlock , 注意unlock最好写在finally里避免异常死锁
private Lock lock;
这里lock只是声明了引用。上述代码中没有看到什么时候实例化了。