62,634
社区成员




import java.util.Timer;
import java.util.TimerTask;
class MyTask extends TimerTask{
private int i = 0;
private boolean flag = false;
public void run(){
i++;
if(i > 10){//当i增加到10时,将flag=true
flag = true;
}
System.out.print(i + " ");
}
public boolean getFlag(){
return this.flag;
}
// public int getValue(){
// return this.i;
// }
}
public class MatchDemo{
public static void main(String args[]){
Timer t = new Timer();
MyTask mytask = new MyTask();
t.schedule(mytask,1000,1000);
while(true){
if(mytask.getFlag()){//flag为true时
t.cancel();//停止计时器任务
break;
}
}
}
}
package test;
import java.util.Timer;
import java.util.TimerTask;
/**
* 定义监听器
*/
interface FlagStatusListener {
public void flagValueChanged(boolean newFlagValue);
}
class MyTask extends TimerTask{
// 监听器对象
private FlagStatusListener listener;
private int i = 0;
private boolean flag = false;
public void run(){
i++;
if(i > 10){
boolean oldValue = flag;
flag = true;
// 发起通知
if(this.listener != null && oldValue != flag){
listener.flagValueChanged(flag);
}
}
System.out.print(i + " ");
}
public MyTask(FlagStatusListener listener){
this.listener = listener;
}
}
public class Test {
public static void main(String args[]){
final Timer t = new Timer();
MyTask mytask = new MyTask(
// 用一个匿名类监听状态变化,等待 timer 主动通知
new FlagStatusListener (){
public void flagValueChanged(boolean newFlagValue){
if(newFlagValue == true)
t.cancel();
}
});
t.schedule(mytask,1000,1000);
}
}
[/quote]大概有些明白了:就是说,我主线程里只是开启了定时器任务,而什么时候这个定时器结束,是有任务来决定的。主线程开启任务后就执行完了。当我在任务中设定好的(或者像你说的AWT/Swing中的控件事件,这只不过是外部条件)条件条件满足时,就会去调用监视器已经设定好的程序来进行处理。这一过程也是在任务的一部分了。不知道我理解得对不对
package test;
import java.util.Timer;
import java.util.TimerTask;
/**
* 定义监听器
*/
interface FlagStatusListener {
public void flagValueChanged(boolean newFlagValue);
}
class MyTask extends TimerTask{
// 监听器对象
private FlagStatusListener listener;
private int i = 0;
private boolean flag = false;
public void run(){
i++;
if(i > 10){
boolean oldValue = flag;
flag = true;
// 发起通知
if(this.listener != null && oldValue != flag){
listener.flagValueChanged(flag);
}
}
System.out.print(i + " ");
}
public MyTask(FlagStatusListener listener){
this.listener = listener;
}
}
public class Test {
public static void main(String args[]){
final Timer t = new Timer();
MyTask mytask = new MyTask(
// 用一个匿名类监听状态变化,等待 timer 主动通知
new FlagStatusListener (){
public void flagValueChanged(boolean newFlagValue){
if(newFlagValue == true)
t.cancel();
}
});
t.schedule(mytask,1000,1000);
}
}