2

我有一些通过线程执行的可运行代码。线程由多段代码执行,我如何确保只有一个线程在某个点执行该可运行代码。

我尝试使用在线程开始时为真并在线程结束时变为假的布尔值,但这没有帮助。

有任何想法吗?

4

2 回答 2

3

-首先它是多个线程访问的对象的资源。

-现在,如果您只想让 1 个线程在某个时间实例访问该资源,那么您可以执行以下操作* *

1.使用java.util.concurrent.Semaphore线程数等于1,因此一次实例中只有1个线程可以访问该资源。

例如:

Semaphore s = new Semaphore(1);

2.您也可以使用SingleThreadExecutor,因为它先完成一项任务,然后再进行第二项任务,依此类推。所以不需要使用同步。

于 2012-11-28T10:30:55.863 回答
2
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();
            }
        }
    }
}
于 2012-11-28T10:09:42.790 回答