请问下面这么使用线程池是否是线程安全的呢?

大板牙花生 2022-07-01 09:10:12

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里面,不知道这个写法对不对,或者说这种判断有没有原则呢

...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
=PNZ=BeijingL 2022-10-19
  • 打赏
  • 举报
回复

你的伪代码写的有问题, 不能帮你i判断

建议你看看你的代码判断
1)多个线程是否是使用同一个对象的LOCK
2)LOCK状态处理是否正确,lock.lock,lock.trylock, lock.unlock , 注意unlock最好写在finally里避免异常死锁

Kingdeguo 2022-09-17
  • 打赏
  • 举报
回复

private Lock lock;

这里lock只是声明了引用。上述代码中没有看到什么时候实例化了。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧