t=new Thread(this,"clocky");
t.start();
これは新しいスレッドを作成する方法ですが、なぜこれを使用するのかわかりません。「this」はJavaのマルチスレッド化ではどういう意味ですか?
t=new Thread(this,"clocky");
t.start();
これは新しいスレッドを作成する方法ですが、なぜこれを使用するのかわかりません。「this」はJavaのマルチスレッド化ではどういう意味ですか?
現在のオブジェクトrun()
メソッド(Runnable
インターフェイス)をこのスレッドのメイン/開始方法として使用していることを意味します。
Java docを見てみましょう。そのrunメソッドこのスレッドが 開始されたときに呼び出されるオブジェクト - あなたが実際に
public Thread(Runnable target, String name)
java docこのコンストラクタを呼び出している
ターゲット氏は述べています。 nullの場合、このスレッドのrunメソッドが呼び出されます。
名 - それはJavaで他の場所にあるように、新しいスレッド
の名前ここでthis
は、あなたがそれを呼び出しているクラスの現在のオブジェクトを参照します。あなたのクラスがRunnable
を実装し、run()
メソッドをオーバーライドしていると確信しています。コンストラクタパラメータがどのようにマッチするか
最後の単語にマイナータイプミス:*が一致します。 –
ow。はい。ありがとう。修正されました。 –
ところで、非常に良い答え、upvoted! ;-) –
を見てみましょう
簡単な例
public class Test {
public static void main(String[] args) throws ParseException {
Thread threadOne = new Thread(new Class_1(),"Class_1");
Thread threadTwo = new Thread(new Class_2(), "Class_2");
threadOne.run(); //This run calls run in Class_1
threadTwo.run(); //This run calls run in Class_2
}
}
class Class_1 implements Runnable{
@Override
public void run() {
System.out.println("Class_1 run method");
}
}
class Class_2 implements Runnable{
@Override
public void run() {
System.out.println("Class_2 run method");
}
}
出力
Class_1 run method
Class_2 run method
Runnableインターフェイスを現在のクラスに実装し、キーワードを使用して現在の実行可能オブジェクトをクラスのコンストラクタ内に渡してスレッドを初期化する必要があります。
以下のサンプルのように実行可能クラスのインスタンスを作成する際には実行メソッドを呼び出す必要があります。
public class Nool implements Runnable {
Thread t;
public Nool() {
t = new Thread(this, "Nool");
t.start();
}
@Override
public void run() {
System.out.println("NOOL");
}
}
私は説明があなたを助けてくれることを願っています。
オブジェクトのコンストラクタが返される前に、あるオブジェクトへの参照をスレッドに与えることは、まったく悪い考えです。 (オブジェクトが[_safely published_](https://www.ibm.com/developerworks/library/j-jtp0618/)になる前に) –
@jameslarge説明しようとしていることを理解できません。 – vijayraj34
'Nool'クラスのコンストラクタは' this'を新しいスレッドに渡します。 'this'は、コンストラクタがまだ構築を完了していないオブジェクトへの参照です。新しいスレッドが開始されたときにスレッド間で同期がとれていないので、これは悪いことです。同期がないと、あるスレッドが別のスレッドによって加えられた変更をいつ(いつまでも)確認することはできません。 'thread.start()'はあなたのコンストラクタが行う最後のものですが、新しいスレッドはオブジェクトを非構造状態で見ることができます。 –
修正:これは**新しいスレッドを作成する**方法です。詳細は、[スレッドの定義と起動](https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html)を参照してください。 – shmosel