mit*_*hus 2 java static multithreading thread-safety
如若threadMessage在方法SimpleThreads例子是synchronized原则?
假设你的意思是这个代码:
// 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);
}
Run Code Online (Sandbox Code Playgroud)
我的答案是否定的,没有共享状态可以保护,因此不需要进一步锁定(在被调用的东西中已经完成了什么).
获取currentThread已经完成了所需的任何锁定(如果有的话).format方法将格式化的字符串写入stdout,其中PrintStream执行锁定以确保写入的消息不会混杂在一起并且每行都会单独写入.
将线程名存储在局部变量threadName中意味着它在自己的堆栈帧上有自己的存储(为该特定方法调用分配),本地变量内容不能被任何其他对此方法的调用(由另一个线程或由同样的线程).如果threadName是一个静态变量,那么你需要进行同步,以便在调用currentThread方法和format方法之间不会被覆盖.使变量local变得简单.
如果多个线程同时调用此方法,则除了条目可以在stdout中以不同顺序显示之外,没有任何事情可能发生.无论如何,这可能发生.