我有一个如下所述的条件,我需要多个客户端来访问我的服务器。我的代码如下所示。
main(){
new thread(new class()).start();
}
void run(){
xyz();
}
xyz(){
switch(){
case 1:
read()
break;
case 2:
write()
}
}
我想确保当一个线程正在执行write()时。不应阻止read()。我有许多这样的功能相互关联。我怎样才能确保功能同步?我应该删除开关盒并使用同步块吗?或者还有其他方式吗?
答案 0 :(得分:1)
取下开关?但“切换”与同步无关。听起来,也许你真正的问题是关于要锁定的对象,有多少,以及什么时候。
你说,“我想确保当一个线程正在执行write()时。不应该阻塞read()。”
您的代码似乎已经这样做了。您没有向我们展示任何会阻止read()调用与write()调用同时发生的事情。您试图阻止 的是什么?如果你只想防止并发的write()调用,但你不关心read()调用同时发生什么,那么它可能如下所示:
private Object writerLock = new Object();
xyz(...) {
//same as in your example
}
private ... read(...) {
...
}
private ... write(...) {
synchronized(writerLock) {
...
}
}