2017-12-07 13 views
-2

特定の値を含む(String、String)型のStringまたはHastableのリスト。 私は、複数のスレッドが実行されている状況があり、それぞれのスレッドが上記のリストの値のうちの1つだけを使用したいとします。リストのロックの作成<String>またはHastable <String、String>

例: リスト - セット1、SET2、SET3

スレッド1がセット1を使用し、スレッド2リスト内の値のいずれかを使用しようとした場合、それはSET2とSET3のみが利用できるように取得する必要があります。 Set1は、Thread1が完了したときに使用可能になります。あなたはListにロックし、仕事を終えた後、/開始する前に、適切なSetを追加/削除することによって、それを実装することができ

+2

このクラスは、より一般的にするためにジェネリック医薬品を使用することができますでは、これまでに何を試しましたか? – daniu

+0

ブロッキングキューを使用できます。 "BlockingQueueの実装はスレッドセーフです。" –

答えて

0

:もちろん

public class ListLock { 
    private List<Set<String>> list = new ArrayList<>(); 

    //initialize with some values 
    public ListLock(List<Set<String>> availableValues) { 
     this.list = availableValues; 
    } 

    //this will allow your Thread to get an available value. Your Thread needs to keep the selected value until the job is done and put it back 
    public void synchronized aquireValue(Selector selector) { 
     //this one is little bit tricky, you provide some interface, that has 1 method, that will call a "select" function on your Thread. 
     Set<String> selected = selector.select(list); 
     this.list.remove(selected); 
    } 

    //after job is done, put the value back in the list, so it's available for another Thread 
    public void synchronized releaseValue(Set<String> value) { 
     this.list.add(value); 
    } 
} 

をあなたは

関連する問題