【问题标题】:performing synchronization in java threads在java线程中执行同步
【发布时间】:2014-03-12 19:00:03
【问题描述】:

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

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

void run(){
xyz();
}

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

我想确保当 write() 由一个线程执行时。 read() 不应被阻止。我有很多这样的功能,它们是相互关联的。如何确保功能同步?我应该移除开关盒并使用同步块吗?还是有其他方法?

【问题讨论】:

  • 使用读/写锁? (Java有ReentrantReadWriteLock

标签: java multithreading synchronized


【解决方案1】:

移除开关?但是“切换”与同步无关。听起来,也许你真正的问题是关于要锁定哪些对象、数量和时间。

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

您的代码似乎已经这样做了。您没有向我们展示任何会阻止 read() 调用与 write() 调用同时发生的东西。您试图阻止什么?如果您只想阻止并发 write() 调用,但不关心 read() 调用同时发生的情况,则可能如下所示:

private Object writerLock = new Object();

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 2021-01-02
    • 2013-04-02
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多