我有一个带有静态变量的类,并且多个线程将具有该类的实例。
我关注的静态变量是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。