2011-11-28 6 views
0

私は最初のサーバー、単純なチャットサーバーを作成しようとしています。Runnableスレッドクラスを使用してスレッドにパラメータを渡す方法を理解しようとしています

私はRunnableというクラスを持っています。cCleanThreadというクラスは、スリープを使用して c Globals.mUserList.Clean();を10秒ごとに呼び出すスレッドを作成します。

cCleanThreadの各インスタンスにはそれぞれmUserListオブジェクトがあるようにしたいと思います。私はこれを行う簡単な方法を理解することはできません。

cCleanThreadオブジェクトを作成するときに、mUserListのパラメータをどのように渡す必要があると思いましたか?

コード

public class cCleanThread implements Runnable { 

Thread runner; 
public cCleanThread() { 
} 

public cCleanThread(String threadName) { 
    runner = new Thread(this, threadName); // (1) Create a new thread. 
    System.out.println(runner.getName()); 
    runner.start(); // (2) Start the thread. 
} 

public void run() { 
    //Display info about this particular thread 
    System.out.println(Thread.currentThread()); 
    while(true) 
    { 

     try { 
      Thread.sleep(20*1000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     cGlobals.mUserList.Clean(); 
    } 
} 
} 
+0

可能重複どのように変数を新しいRunnable宣言に渡すことができますか?](http://stackoverflow.com/questions/4297261/how-can-i-pass-a-variable-into-a-new-runnable-declaration) – Ralph

答えて

1

は、スレッドのコンストラクタにmUserListを渡します

public class cCleanThread implements Runnable { 

    private final UserList localUserList; 

    public cCleanThread(String threadName, UserList mUserList) { 
     this.localUserList = mUserList; 
     //... 
    } 

    public void run() { 
     //... 
     localUserList.Clean(); 
    } 
} 

は、単に別の引数を持つスレッドを作成:

Thread first = new cCleanThread("Thread-Foo", fooUsers); 
Thread second = new cCleanThread("Thread-Bar", barUsers); 
+0

こんにちは、ありがとう、私はこのプロジェクトに取り組んでいるように私はjavaを学ぶのです。 –

1

cCleanThreadクラスのインスタンス変数としてmUserListを追加し、コンストラクタで初期化します。すべてのスレッドはcCleanThreadインスタンスのインスタンスに対応するため、各スレッドに対して正確に1つのmUserListが存在します。このmUserListインスタンスは、両方とも同じクラスになるので、run()メソッドにアクセスできます。

2

これが答えではありません。それは改善のようなものです。

10秒ごとにクリーンを実行する場合は、Timerクラスを使用できます。これはexampleです。スレッドは自動的に実行されます。

+0

タイマーはスイングパッケージに入っています。その依存関係は確かですか? –

+0

申し訳ありませんが、私はjava.util.Timerへのリンクを変更しました。 – gigadot

関連する問題