2017-09-18 11 views
-2

Collectionsクラスメソッドを使用せずにコレクションクラスを同期させるにはどうすればよいですか?何か別のクラスがありますか?またはArrayListクラスのメソッドをオーバーライドしてから同期させることはできますか?Collectionsクラスメソッドを使用せずにJavaコレクションクラスを同期させるにはどうすればよいですか?

+1

なぜ 'Collections'クラスメソッドを使用できないのですか?彼らはあなたの問題のための最善の解決策のように聞こえます... –

+0

@SocraticPhoenix私は自分のクラスをすべてのオブジェクトではなく特定のオブジェクトに対して同期させたいという状況を考えてみましょう。どのように実装することができますか? – divScorp

答えて

0

任意のオブジェクトを同期するには、同期を処理する呼び出しハンドラを使用して、同期するオブジェクトのプロキシを作成します。例:

public static class Synchronizer implements InvocationHandler{ 

    private final Object objectToSync; 

    public Synchronizer(Object objectToSync){ 
     this.objectToSync = objectToSync; 
    } 

    @Override 
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
     synchronized (objectToSync){ 
      return method.invoke(objectToSync, args); 
     } 
    } 
} 

public static void main(String ... args) { 

    List<Integer> originalList = new ArrayList<>(); 

    List<Integer> syncList = (List<Integer>) Proxy.newProxyInstance(Synchronizer.class.getClassLoader(), new Class[]{List.class}, new Synchronizer(originalList)); 

} 
関連する問題