簡體   English   中英

如何在多個線程正在訪問的對象上使用CountDownLatch / Synchronized?

[英]How to use CountDownLatch/Synchronized on an object that is being accessed by multiple threads?

我收到了遺留的JAX-WS代碼,發現它不是線程安全的。 因此,我想對多個線程同時訪問的對象實施CountDownLatch。 我無法在此處放置整個代碼,因此我將簡化代碼,以引用要在其上使用CountDownLatch的對象,

public class JAXDataLoader extends ClassFoo implements Executor{
  private static ClassBar mInstance = null;
  public JAXDataLoader(ClassBar instance) {
    super();
    mInstance = instance;
  }
}

當我從此類獲取URL地址和端口時,此mInstance對象對於我的JAX-WS客戶端是重要的對象,即

URL address = mInstance.getConnectionEndpoint(); //returns example: http://10.11.800.111:5019

基本上我需要做的是

synchronized(instance){
    mInstance = instance;
}

但是,這實際上不起作用! 有任何解決方法的建議嗎?

進行mInstance.getConnectionEndpoint()調用時進行同步。 做到這一點的一種好方法是制作一個包裝器類並同步該類。 不確定要實現執行器嗎?

public final class ClassBarWrapper{
  private final ClassBar mInstance;
  public ClassBarWrapper(ClassBar instance){
    this.mInstance=instance;
  }
  public URL synchronize getConnectionEndpoint(){
    return mInstance.getConnectionEndpoint();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM