应该使用SimpleThreads
example中的threadMessage
方法吗?原则上是同步
吗?
最佳答案
假设你的意思是this code :
// Display a message, preceded by
// the name of the current thread
static void threadMessage(String message) {
String threadName =
Thread.currentThread().getName();
System.out.format("%s: %s%n",
threadName,
message);
}
我的答案是否定的,没有需要保护的共享状态,因此不需要进一步锁定(在被调用的事物中已经完成的操作上)。
获取 currentThread 已经完成了它需要的任何锁定(如果有)。 format 方法将格式化的字符串写入 stdout,其中 PrintStream 进行锁定以确保写入的消息不会困惑在一起,并且每行都会单独写入。
将线程名称存储在局部变量 threadName 中意味着它在自己的堆栈帧上有自己的存储(为该特定方法调用分配),局部变量内容不能被对此方法的任何其他调用(另一个方法调用)覆盖。线程或通过同一线程)。如果 threadName 是静态变量,那么您需要同步,以便在调用 currentThread 方法和 format 方法之间它不会被覆盖。将变量设置为本地变量可以让事情变得简单。
如果多个线程同时调用此方法,则不会发生任何事情,除非条目可以以不同的顺序显示在标准输出中。无论如何,这都有可能发生。
关于java - SimpleThreads 示例中的 threadMessage 是否应该同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26932614/