2016-11-13 5 views
0

私は次のように整数配列を返すクラスルーパーを持っている:whileループを持つRunnable run()メソッドからInteger Arrayを取得/返す方法は?

public class Looper implements Runnable{ 

    public AtomicBoolean keepRunning; 

    public Looper() { 
     keepRunning = new AtomicBoolean(true); 
    } 

    public void stop() { 
     keepRunning.set(false); 
    } 

    @Override 
    public void run() { 

     try { 
      . 
     . 
     . 
      while (keepRunning.get()) { 


        int[] A = ..... ;      

      } 

    } 

} 

int[] Aは、すべてのwhileループの反復の後に異なる値を持つことになります。 と同じクラスに別のメソッドがあり、whileループが実行されるたびに整数配列が格納され、いくつかの操作が実行されるとします。 しかしvoid性質のため、Runnableという性質のため、他の方法ではAの値を取得できません。 この方法以外でint[] Aにアクセスする方法はありますか?

+1

'run()'が無効でなくても、値を1回だけ返すことができます。他のスレッドが読むことができるキューを探しているのでしょうか?基本的な生産者/消費者の状況のようです。 – Kayaman

+0

はい、それを得る方法はありますか?ありがとう、しかし!! –

+0

私が言ったように。キュー。プロデューサー/消費者。 – Kayaman

答えて

0

コメントに指摘されているように、「Java Producer Consumer Queueの例」をGoogleで検索し、必要に応じてそのコードを修正することができます。

一般的な考え方は、以下のように、1つのスレッドが読み込み中であり、他のスレッドが書き込み中のデータ構造を使用することです。

public class Producer implements Runnable{ 
    private LinkedBlockingQueue<int[]> queue; 

    public Producer(LinkedBlockingQueue<int[]> queue) { this.queue = queue;} 

    @Override 
    public void run() { 
     while (keepRunning.get()) { 
       int[] a = ..... ;      
       queue.add(a); 
     } 
    } 

public class Consumer implements Runnable{ 
    private LinkedBlockingQueue<int[]> queue; 

    public Consumer(LinkedBlockingQueue<int[]> queue) { this.queue = queue;} 

    @Override 
    public void run() { 
     while (keepRunning.get()) { 
      int[] a = queue.take(a); 
      saveValue(a); 
     } 
    } 

public class MainOrWhatever { 
    public void whateverMethod { 
     LinkedBlockingQueue<int[]> theQueue = new LinkedBlockingQueue<int[]>(); 
     Consumer consumer = new Consumer(queue); 
     Producer producer = new Producer(queue); 
     executorService.submit(consumer); 
     executorService.submit(producer); 
     ... 
    } 
} 
関連する問題