单件和储物柜(互斥锁)

时间:2014-06-03 04:24:19

标签: java singleton mutex

我有一个单身人士课程。 他的一个方法是:

public static void printMessage(boolean print, String text) {
    if (print) {
        System.out.print(text);
    }
}

我有一个多线程应用程序,并且有多个线程正在使用此方法。 我不确定,但是我需要在printMessage的实现中添加互斥吗? 我认为我不需要,因为我没有使用任何班级成员。我是对的吗?

2 个答案:

答案 0 :(得分:0)

这是一个只使用参数的静态方法。其中一个参数是原始的,另一个是不可变的。我没有理由同步该方法。

答案 1 :(得分:0)

在这种特定情况下,您不会访问任何共享存储,例如成员变量,静态字段等。但是,您还需要查看您调用的任何函数。它们是线程安全的吗?在您的情况下,System.out.print线程安全吗?如果不是,那么两个调用如:

//Thread 1
printMessage(true, "abc");

// Thread 2
printMessage(true, "def");

可能会打印:

adebcf

因为交错。

现在,print的Javadoc没有提到线程安全性。因此,假设它线程安全。

由您来决定文本交错是否是您的用例的问题。如果是这样,请采取适当的预防措施,以防止打印输出交错。