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
为什么代码是从上次运行的结果继续往后执行?而不是从新开始?
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
为什么代码是从上次运行的结果继续往后执行?而不是从新开始?
我改变flag为false暂停了这个运行 再次改变为true.
第一 为什么它不是重头[从第一个if (flag)]重新开始??第二 为什么while(matcher.find())不是应该还在运行么?只是不输出结果?
这个循环没停过,这个线程没终止.你改flag肯定是继续while里的内容。
那也应该在while里面从头开始执行呀
比如
main线程一直在while(ture)循环
其他线程执行了flag=true
主线程继续执行进入了if(flag)然后执行textField.setText("begin!");
此时其他线程把flag改变了,main线程还是会继续执行后面的i=0;等等,除非main线程再判断flag,然后调用continue,才会从头开始
要知道,改变flag只是改变一个变量的状态,并没有改变程序执行指针的位置,所以程序执行指针还是会按原来的顺序继续执行