这个问题中的代码显然太长了,所以我写了一个示例,您可以复制和粘贴我认为包含我遇到的概念问题的示例。感谢那些一直阅读之前版本的人!
两个文件
一个调用另一个并传递一个 ArrayList。
第二个文件改变了 ArrayList 并为第一个文件提供了一个 getter 来访问改变的文件。
在调用 getter 之前,如何让第一个文件等待第二个文件中的处理。目前这段代码给你一个 NullPointerException 因为第一个文件没有等待。
执行线程上的join()似乎不起作用,如果我使用wait(),我如何从第二个文件通知()到第一个文件?
这是代码:
public class Launcher implements Runnable {
private ArrayList al = new ArrayList();
private ArrayProcessor ap;
public Launcher(ArrayList al){
this.al = al;
ArrayProcessor ap = new ArrayProcessor(al);
}
public static void main(String[] args){
ArrayList anArray = new ArrayList();
anArray.add(new Integer(1));
anArray.add(new Integer(13));
anArray.add(new Integer(19));
Launcher l = new Launcher(anArray);
l.liftOff();
}
public void liftOff(){
Thread t = new Thread(new Launcher(al));
synchronized(t){
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.ap = new ArrayProcessor(al);
System.out.println("the array: " + ap.getArray());
}
public void run() {
ap.doProcess(al);
}
}
和被调用的文件:
public class ArrayProcessor extends Thread{
private ArrayList al;
public ArrayProcessor(ArrayList al){
this.al = al;
}
public void doProcess(ArrayList myAL){
this.start();
}
public void run() {
// this should increment the ArrayList elements by one
for (int i=0; i<al.size(); i++){
int num = ((Integer)al.get(i)).intValue();
al.set(i, new Integer(++num));
}
}
public ArrayList getArray(){
return al;
}
}