有一程序:
public class Test{   TestThread t=new TestThread();
    t.start();
   System.out.println(t.testValue());}public class TestThread extends Thread{
   private String testValue;
public void setTestValue(String testValue){
this.testValue=testValue;
}
public String getTestValue(){
return testValue;
}
public void run(){
   //some operations
   setTestValue("some value");
}}System.out.println(t.testValue());这句打印出来的是空值,怎样使得线程执行完成,才去取得testValue的值,怎样达到同步?

解决方案 »

  1.   

    class Test {
        TestThread t = new TestThread();
        public void test(){
          t.start();
          while(!t.getFlag()){
            Thread.yield();
          }
          System.out.println(t.getTestValue());
        }
      }  class TestThread extends Thread {
        private boolean setFlag = false;
        private String testValue;
        public void setTestValue(String testValue) {
          this.testValue = testValue;
        }    public String getTestValue() {
          return testValue;
        }    public void run() {
          setTestValue("some value");
          setFlag = true;
        }    public boolean getFlag(){
          return setFlag;
        }
      }
      

  2.   

    楼主这个程序本身就有问题,改好以后有问题再问吧public class Test{   TestThread t=new TestThread();
        t.start();
       System.out.println(t.testValue());}
    这个明显是编译通不过的
      

  3.   

    believefym(暮色,miss,迷失,miss) 同志,和我抢分啊:)
    楼主的错误我帮他改过来了
      

  4.   

    to  believefym(暮色,miss,迷失,miss) :
              这只是做一个伪程序,不是真正运行的程序。
    to  westarea(彩色的草原):
              那主线程岂不是要一直在那里while(!t.getFlag()){
                                   Thread.yield();
                                    }做这个操作。
    我以前做过,主线程可以等到子线程取到某个值。但现在忘了。
      

  5.   

    在westarea(彩色的草原) 的run方法最后,添加notifyall,唤醒等待线程。而且class Test 中用if判断就足够了。
      

  6.   

    我的解法是:
    伪代码:
        ...WorkThread extends Thread{   ....run(){
       synchronized(this){
       //some operations
        }
    }
    }......main(String[] args){
       WorkThread wt=new WorkThread();
    wt.start();
    synchronized(wt){}}
      

  7.   

    我的解法是:
    伪代码:
        ...WorkThread extends Thread{
    private String value;
    getValue(){
    return value;
    }setValue(String value)
    {
      this.value=value;
    }
       ....run(){
       synchronized(this){
       //some operations
          notify();
        }
    }
    }......main(String[] args){
       WorkThread wt=new WorkThread();
    wt.start();
    synchronized(wt){
          if (wt.isAlive()){
             wt.wait();
         }
    }
    }
    System.out.println("value-------->"+wt.getValue());
    就可以了。谢谢大家。