2014-03-12 127 views
0

我有一个如下所述的条件,其中我需要多个客户端来访问我的服务器。我有我的代码,如下所示。在Java线程中执行同步

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

void run(){ 
xyz(); 
} 

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

我想确保当一个线程执行write()时。 read()不应该被阻塞。我有很多这样的功能相互关联。我怎样才能确保这些功能是同步的?我应该删除开关的情况下,并使用同步块?或者还有其他方法吗?

+2

使用读/写锁? (Java有'ReentrantReadWriteLock') – fge

回答

1

取出开关?但“开关”与同步无关。听起来像,也许你真正的问题是关于什么对象锁定,多少,什么时候。

你说过,“我想确保当一个线程正在执行write()时,read()不应该被阻塞。”

你的代码似乎已经这样做了。您没有向我们展示任何可以防止read()调用与write()调用同时发生的任何事情。你试图阻止什么?如果你只是想阻止并发写()调用,但你不关心什么用read()调用发生在同一时候,那么这可能是这样的:

private Object writerLock = new Object(); 

xyz(...) { 
    //same as in your example 
} 

private ... read(...) { 
    ... 
} 

private ... write(...) { 
    synchronized(writerLock) { 
     ... 
    } 
}