我的问题关注线程。我想从方法运行中得到var(类变量),但不能得到和 我不知道发生了什么。
import java.util.ArrayList;
public class Interpreter_controller extends Thread{
ArrayList<String> var;
public Interpreter_controller(ArrayList<String> var) {
this.var = var;
System.out.println(this.var.isEmpty());
}
public void run() {
System.out.println(this.var.isEmpty());
}
}
当我从
开始线程时Interpreter_controller control = new Interpreter_controller(array_list_variable);
control.start();
输出
假
真
如何从run方法中获取var?
新编辑
我删除了扩展线程然后结果是正确的但我想在这个类中使用线程
我的目标是从另一个类传递arraylist以在线程类(run方法)中使用
答案 0 :(得分:0)
我的目标是从另一个类传递arraylist以在线程中使用 class(run method)
看看这个:
class Tmp implements Runnable {
public Object runArg;
public Tmp(Object arg) {
runArg = arg;
}
public void run() {
// thread job
}
}
使用:
new Thread(new Tmp("Hello World")).start();
所以你必须创建一个新类而不是使用匿名类。
注意:除非您使用的是J2ME,否则不应使用原生Thread
。你会遇到很多问题。您应该使用ExecutorService
类来使用Executors
:
private final ExecutorService pool = Executors.newCashedThreadPool();
...
pool.submit(new Tmp("HelloWorld"));
答案 1 :(得分:0)
您好以下将为您提供先机。确保列表已同步。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) throws InterruptedException {
Main m = new Main();
m.execute();
}
public void execute() throws InterruptedException {
List<String> list = new ArrayList<String>();
list = Collections.synchronizedList(list);
List<Thread> tlist = new ArrayList<Thread>();
for (int i = 0; i < 5; i++) {
Thread t = new SomeThread(list, i);
t.start();
tlist.add(t);
}
while (true) {
int j = 0;
for (int i = 0; i < tlist.size(); i++) {
Thread.sleep(100);
if (!tlist.get(i).isAlive()) {
j++;
for (String s : list) {
System.out.println(s);
}
}
}
if (j == tlist.size()) {
break;
}
}
}
public class SomeThread extends Thread {
private List<String> list;
private int number;
private long sleepTime;
public SomeThread(List list, int number) {
this.list = list;
this.number = number;
sleepTime = new Random(number).nextInt(500);
}
@Override
public void run() {
try {
Thread.sleep(sleepTime);
list.add(number + " wake up from sleep");
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
}