次の変数を渡したいと仮定します
String foo = "hello world";
次のスレッドへの引数として
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
}
}).start();
誰かがこれを行う方法を説明できますか?
ありがとう。
次の変数を渡したいと仮定します
String foo = "hello world";
次のスレッドへの引数として
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
}
}).start();
誰かがこれを行う方法を説明できますか?
ありがとう。
サブクラススレッド:
public class MyThread extends Thread {
private String arg;
public MyThread(String arg) {
this.arg = arg;
}
@Override
public void run() {
// Use your variable
}
}
誰かがこれを行う方法を説明できますか?
したがって、問題にはより多くの解決策がありますが、最初からうまくいきます。独自のサブクラスを作成し、そのコンストラクターThread
を介してパラメーターを渡すことをお勧めします。
public class MyThread extends Thread {
public MyThread(String value) {
}
}
Runnable
または、インターフェースを使用することもできます。
public class MyThread implements Runnable { ... }
または、@ ericksonが指摘したように、コードをメソッドの本体にラップできますが、別のメソッドで定義された内部クラス内の非最終変数を参照できないため、メソッドの引数として最終変数を渡す必要があります。
として宣言されているローカル変数はfinal
、スレッドに表示されます。
void doSomething(final String foo) {
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
System.out.println(foo);
}
}).start();
}
Javaでは匿名クラスを使用して引数を渡すことはできません。あなたができることは、別のクラスを作成し、それをインスタンス変数として渡すことです
String foo = "hello world";
final String parameter = foo;
new Thread(new Runnable() {
@Override
public void run() {
//Use parameter
}
}).start();