在java线程中执行同步

时间:2014-03-12 19:00:04

标签: java multithreading synchronized

我有一个如下所述的条件,我需要多个客户端来访问我的服务器。我的代码如下所示。

main(){
new thread(new class()).start();
}  

void run(){
xyz();
}

xyz(){
     switch(){
      case 1:
        read()
        break;
      case 2:
        write()  
     }
}

我想确保当一个线程正在执行write()时。不应阻止read()。我有许多这样的功能相互关联。我怎样才能确保功能同步?我应该删除开关盒并使用同步块吗?或者还有其他方式吗?

1 个答案:

答案 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) {
        ...
    }
}