Nat*_*hes 6

假设你的意思是这个代码:

// 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中以不同顺序显示之外,没有任何事情可能发生.无论如何,这可能发生.