public void run() {

            try {
                synchronized(this){
while (true) {

                if (flag) {
                    textField.setText("begin!");
                    i=0;
                 Matcher matcher = pattern.matcher(sourcehtml.srccode);             
                  while(matcher.find()){  
                      Thread.sleep(500);
    if (flag) {
      //  textField.setText(textField.getText() + i++);
    textField.setText(matcher.group()+"\n"+textField.getText()); 
    }
    if (!todoflag){break;}
    } flag=false;            
     // textField.setText(textField.getText() + (int) (Math.random() * 100));                     
// textField.setText(i+"\n"+textField.getText());
        //        textField.paintImmediately(textField.getBounds());
                                    }  
                                    Thread.sleep(500);// 停半秒

}
                }} catch (InterruptedException e) {
e.printStackTrace();
}
}这是我控制的一个输出正则匹配结果的类中的方法.  当我执行我的程序的时候我的主线程处于循环状态中.但由于flag是false所以没运行..
当我用另外一个线程改变flag变成ture 程序开始运行
然后flag改变为false后 我再变为true 
为什么代码是从上次运行的结果继续往后执行?而不是从新开始?

解决方案 »

  1.   

    补充一下.. 有两个地方不明白..
    我改变flag为false暂停了这个运行 再次改变为true.
    第一 为什么它不是重头[从第一个if (flag)]重新开始??第二 为什么while(matcher.find())不是应该还在运行么?只是不输出结果?
      

  2.   

    while (true)
    这个循环没停过,这个线程没终止.你改flag肯定是继续while里的内容。
      

  3.   


    那也应该在while里面从头开始执行呀
      

  4.   

    为什么是从头开始,其他线程改变flag而已,不能改变main线程当前执行到哪条语句
    比如
    main线程一直在while(ture)循环
    其他线程执行了flag=true
    主线程继续执行进入了if(flag)然后执行textField.setText("begin!");
    此时其他线程把flag改变了,main线程还是会继续执行后面的i=0;等等,除非main线程再判断flag,然后调用continue,才会从头开始
    要知道,改变flag只是改变一个变量的状态,并没有改变程序执行指针的位置,所以程序执行指针还是会按原来的顺序继续执行