我有一个带有静态变量的类,并且多个线程将具有该类的实例。

我关注的静态变量是Thread,它将从队列中弹出一条消息并通过电子邮件发送,直到队列为空。每次将消息添加到队列中时,我都会检查该线程是否处于 Activity 状态。如果没有,我重新启动它。

if (mailThread == null)
{
    mailThread = new Thread(mailSender);
    mailThread.start();
}
else if (!mailThread.isAlive())
{
    mailThread = new Thread(mailSender);
    mailThread.start();
}

another question中,据说应该在同步块(synchronized block)内使用静态变量。

我的问题是,如果进行检查,仅对这些使用ReentrantLock会安全吗?还是我需要使用synchronized?或两者?

最佳答案

您可以使用ReentrantLock或同步块(synchronized block)。两者同样安全。尽管在某些情况下性能有所不同。查看以下基准:Benchmark 1 Benchmark 2

09-06 15:03