2015-08-18 2 views
0

Я получил устаревший код JAX-WS, который, как я выяснил, не является потокобезопасным. Поэтому я хочу реализовать CountDownLatch для объекта, к которому одновременно обращаются несколько потоков. я не могу поставить весь код здесь, так что я буду упрощать код со ссылкой на объект Я хочу использовать 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; 
} 

Но это не действительно работайте! Любые предложения об обходном пути?

+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(); 
    } 
}