[英]How can i get class variable in run method thread (Java)
我的问题与线程有关。 我想从方法运行中获取var(class variable),但无法获取,我也不知道发生了什么。
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();
输出是
假
真正
我应该怎么做才能从运行方法获得VAR?
新编辑
我删除扩展线程然后结果是正确的,但我想在此类中使用线程
我的目标是从另一个类传递arraylist以在线程类中使用(运行方法)
我的目标是从另一个类传递arraylist以在线程类中使用(运行方法)
看看这个:
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"));
您好以下将使您领先。 确保列表已同步。
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);
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.