如何在多个线程访问的对象上使用CountDownLatch / Synchronized?

时间:2015-08-18 15:44:11

标签: java multithreading concurrency thread-safety jax-ws

我收到了一个遗留的JAX-WS代码,我发现它不是线程安全的。因此,我想在多个线程同时访问的对象上实现CountDownLatch。 我不能在这里提出整个代码,所以我将简化引用我想要使用CountDownLatch的对象的代码,

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

这个mInstance对象是我的JAX-WS客户端的一个重要对象,因为我从这个类中获取了我的URL地址和端口,即

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

基本上我需要做的就是,

synchronized(instance){
    mInstance = instance;
}

但这并没有真正奏效!有关解决方法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

进行mInstance.getConnectionEndpoint()调用时进行同步。一个很好的方法是创建一个包装类并同步该类。你不确定要实现Executor吗?

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