日期:2014-05-20  浏览次数:20693 次

java多线程编程的问题
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 
为什么代码是从上次运行的结果继续往后执行?而不是从新开始?

------解决方案--------------------
探讨
引用:
while (true)
这个循环没停过,这个线程没终止.你改flag肯定是继续while里的内容。


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