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,不过我想精确点,一执行完线程就执行下面的语句,不执行完不能继续执行注:我那条语句必须放在线程里,所以就不要说不用线程这样的话了

解决方案 »

  1.   

    这个线程不久一条语句吗,执行完这一条语句这个线程也就完了吧,把这一条语句锁起来就是啦new Thread(){
                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();
      

  2.   

    啊,我想错了,弄错楼主意思了,可以这样
    new Thread(){
                public void run(){
                  cityData = download((String)cityString.elementAt(page - 1));
                  this.notifyAll();
                }
            }.start();然后在主线程使用cityData前面加wait();
      

  3.   

    使用J2SE5中的新特性。有一个Callable接口,能够使线程返回一个Feature对象。这个对象封装了返回值。可以使用isDone()方法来判断线程中的方法是否执行完成,使用get()方法可以获得返回值。如果调用get()时线程没有执行完,get()方法将阻塞。注意,Callable必须使用ExecutorService.submit()调用。  public class Task implements Callable<String>{
           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();
      

  4.   

    这样抱错啊
    java.lang.IllegalMonitorStateException
    at java.lang.Object.wait(+5)