如何在Java中同步或锁定变量?

让我使用这个小而简单的示例:

class Sample {

private String msg = null;

public void newmsg(String x){

msg = x;

}

public String getmsg(){

String temp = msg;

msg = null;

return temp;

}

}

假设该函数newmsg()由我无权访问的其他线程调用。

我想使用synchonize方法来确保该字符串msg每次仅由一个函数使用。换句话说,功能newmsg()不能与同时运行getmsg()

回答:

那很简单:

class Sample {

private String message = null;

private final Object lock = new Object();

public void newMessage(String x) {

synchronized (lock) {

message = x;

}

}

public String getMessage() {

synchronized (lock) {

String temp = message;

message = null;

return temp;

}

}

}

请注意,我 既没有 使方法本身同步, 也没有 在上同步this。我坚信,除非您 有意

公开该锁,否则仅对只有您的代码才能访问的对象获取锁是个好主意。这样可以轻松地向自己保证,其他任何东西都不会以与您的代码不同的顺序获取锁,等等。

以上是 如何在Java中同步或锁定变量? 的全部内容, 来源链接: utcz.com/qa/424589.html

回到顶部