new Thread(){
public void run(){
cityData = download((String)cityString.elementAt(page - 1));
}
}.start();这里面cityData是一个字符串,我写完这几行代码后马上就要使用这个字符串,怎么才能保证线程执行完再使用这个cityData呢,当然我可以在这代码下面加一个比较耗时的工作,比如
for(int i = 0; i < 60000; i++){
int a = i;
}
完后再使用cityData,不过我想精确点,一执行完线程就执行下面的语句,不执行完不能继续执行注:我那条语句必须放在线程里,所以就不要说不用线程这样的话了
public void run(){
synchronized(this){ cityData = download((String)cityString.elementAt(page - 1));
}
}
}.start();
new Thread(){
public void run(){
lock.lock();
cityData = download((String)cityString.elementAt(page - 1));
lock.unlock();
}
}.start();
new Thread(){
public void run(){
cityData = download((String)cityString.elementAt(page - 1));
this.notifyAll();
}
}.start();然后在主线程使用cityData前面加wait();
public String call(){
return download((String)cityString.elementAt(page - 1));
}
}
//将一个任务交给线程执行,并返回一个Feature对象
Feature f = Executors.newCachedThreadPool().submit(new Task());
//判断任务是否执行完毕
f.isDone();
//或者直接调用get()方法。这里线程执行完毕后,cityData就有值了,没有执行完就阻塞
cityData = f.get();
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(+5)