只有一个线程实例

时间:2012-11-28 09:55:27

标签: java android multithreading thread-safety

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

我尝试使用一个在线程启动时为true的布尔值,并在线程结束时变为false,但这没有帮助。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

<强>例如

Semaphore s = new Semaphore(1);

2。您还可以使用SingleThreadExecutor,因为它会在继续第二个任务之前完成一项任务,依此类推。因此无需使用同步。

答案 1 :(得分:0)

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();
            }
        }
    }
}