Ter*_* Li 7 java multithreading runnable
Thread t = new Thread(new Runnable() { public void run() {} });
Run Code Online (Sandbox Code Playgroud)
我想用这种方式创建一个线程.run如果可能的话,如何将参数传递给方法?
编辑:要使我的问题具体,请考虑以下代码段:
for (int i=0; i< threads.length; i++) {
threads[i] = new Thread(new Runnable() {public void run() {//Can I use the value of i in the method?}});
}
Run Code Online (Sandbox Code Playgroud)
根据Jon的回答,它不起作用,因为i未被声明为final.
Jon*_*eet 10
不,该run方法永远不会有任何参数.你需要将初始状态放入Runnable.如果您使用的是匿名内部类,则可以通过最终的局部变量来实现:
final int foo = 10; // Or whatever
Thread t = new Thread(new Runnable() {
public void run() {
System.out.println(foo); // Prints 10
}
});
Run Code Online (Sandbox Code Playgroud)
如果您正在编写命名类,请向该类添加一个字段并在构造函数中填充它.
或者,您可能会发现课程可以java.util.concurrent帮助您(ExecutorService等) - 这取决于您尝试做什么.
编辑:要将上述内容放入您的上下文中,您只需要在循环中使用最终变量:
for (int i=0; i< threads.length; i++) {
final int foo = i;
threads[i] = new Thread(new Runnable() {
public void run() {
// Use foo here
}
});
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个接受您的参数的自定义线程对象,例如:
public class IndexedThread implements Runnable {
private final int index;
public IndexedThread(int index) {
this.index = index;
}
public void run() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
IndexedThread threads[] = new IndexedThread[N];
for (int i=0; i<threads.length; i++) {
threads[i] = new IndexedThread(i);
}
Run Code Online (Sandbox Code Playgroud)