如何在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