java - SimpleThreads 示例中的 threadMessage 是否应该同步?

标签 java multithreading static thread-safety

应该使用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/

相关文章:

java - 在 Jboss 5.0 上启动 JSF 应用程序时出错

java - TCP 连接,serversocket.accept 运行时不会创建套接字

c# - .NET 多线程访问共享登录 session

c - 使用 pthread_create 时结构会丢失对变量的跟踪

c - 隐式声明静态的问题(编译自定义的 mupdf 库)

static - Visual C++下dllimport/dllexport及静态库编译

java - 在 Swing 中使用具有绝对布局的滚动条

java - Java 1.5 上的 JSR223 实现是否有限制

java - 两个线程引用一个变量

自己类中的 C++ 非静态函数指针