我有一些通过线程执行的可运行代码。线程由多段代码执行,我如何确保只有一个线程在某个点执行可运行的线程。
我尝试使用一个布尔值,该值在线程启动时为 true,在线程结束时变为 false,但这没有帮助。
有什么想法吗?
- 首先是多个线程访问的对象的资源。
- 现在,如果您只想让 1 个线程在某个时间访问该资源,那么您可以执行以下操作*:*
1. 使用线程数等于 1 的 java.util.concurrent.Semaphore
,因此实例一次只能访问 1 个线程。
例如:
Semaphore s = new Semaphore(1);
2.您也可以使用SingleThreadExecutor
,因为它在继续第二个任务之前完成一项任务,依此类推。因此,无需使用同步。
private class MyThread extends Thread
{
private static Lock lock = new ReentrantLock();
public void run()
{
if (MyThread.lock.tryLock())
{
try
{
// TODO something
}
finally
{
MyThread.lock.unlock();
}
}
}
}