2017-12-19 6 views
1

スレッド(クラスのインスタンスを実行する)を別のクラスに渡すことはできますか?それはスレッドとしても実行され、クラスへの引数としてのJavaスレッド

これは、いくつかのサンプルです/コード説明:

Sender sender = new Sender(client, topic, qos,frequency); 
Thread t1; 
t1= new Thread(sender); 
t1.start(); 


Receiver receiver = new Receiver(frequency,client, qos, topic,t1); 
Thread t2; 
t2 = new Thread(receiver); 
t2.start(); 

を両方のクラスは、実行可能な実装と私は、送信者が自分自身が、それを通知するための受信機を待つ呼びたいです。私はそれを試したが、何も起こらない、送信者はまだ待機状態です。

必要に応じてコード全体を提供できます。

+2

をはい、あなたはパラメータとして任意のオブジェクトを渡すことができますが。私はあなたがそれを通知しようとしているかどうか、および/またはその通知をどのように聞いているかに問題があると考えています。そのコードを表示してください。 –

+0

@AndyTurnerそれはここに掲載されています:https://stackoverflow.com/questions/47892098/thread-handling-between-seperate-classesここで私は尋ねましたが、それを正確に表現しませんでした。 –

+2

これはしないでください。 ThreadはJDK 1.0クラスです。この低レベルで並行処理をプログラミングしているなら、間違っていることをお勧めします。 java.util.concurrencyクラスとExecutorsについて考える必要があります。送信者/受信者は、BlockingDequeまたはJMSを使用してよりよく実装される共通のパターンを提案します。あなたの方法は私にはお勧めできません。 – duffymo

答えて

0

ここで私はあなたが求めていると思う何がいくつかのストリップダウンコードです:

public class WaitTest { 

    static class Waiter implements Runnable{ 

     @Override 
     public void run() { 
      System.out.println("Waiting"); 
      try { 
       synchronized(this){ 
        this.wait(); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      System.out.println("Running"); 
     } 

    } 

    static class Notifier implements Runnable{ 

     Object locked; 

     public Notifier(Object locked){ 
      this.locked = locked; 
     } 

     @Override 
     public void run() { 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      synchronized(locked){ 
       locked.notifyAll(); 
      } 

     } 

    } 

    public static void main(String[] args){ 

     Waiter waiter = new Waiter(); 
     Notifier notifier = new Notifier(waiter); 

     Thread t1 = new Thread(waiter); 
     Thread t2 = new Thread(notifier); 

     t1.start(); 
     t2.start(); 
    } 

} 
+0

私はこれを試みます。しかし、それは私のコードのようなより抽象的な方法で行うことはできませんか?私のNotifierにWaiterオブジェクトがない場所はどこですか? –

+0

これも解決策です。私は非常に似たような方法でそれをやった、私はメインで揮発性の変数を宣言し、ウェイターとノーティファイアの同期のためのミューテックスとしてそれを使用した。揮発性があなたが使用したオブジェクトよりも良くなったり悪かったりすると思ったら、私に知らせてください。 –

関連する問題