我有一个应用程序,我需要每分钟访问一次Web服务。我打算使用一个线程,但如果用户输入任何内容,那么'计时器'需要延迟。我不太清楚如何在java中实现它
答案 0 :(得分:0)
看一下wait()的these examples和programcreek.com的notify(),你知道wait和notify的概念吗?
答案 1 :(得分:0)
我个人就是如何处理它: 我声明了两个类,它们将在每个给定的毫秒后为您提供函数调用的功能。
在新界面中:
public interface TickListener {
public void tick();
public void tick(Exception e);
}
在另一个班级
public class TickManager {
public static final int STATE_TICK_ONCE = 0;
public static final int STATE_TICK_NONSTOP = 1;
public static final int STATE_TICK_NONE = 2;
int state, delay;
Thread t;
TickListener[] listeners;
long tickCount;
public TickManager(){
this(TickManager.STATE_TICK_NONE);
}
public TickManager(int state){
this(state,1000);
}
public TickManager(int state, int d){
this(state,d,null);
}
public TickManager(int state, int d, TickListener[] t){
this.state = state;
delay = d;
listeners = t;
tickCount=0;
if(state!=2){
startTicking(state);
}
}
public void startTicking(int s){
tickCount = 0;
state=s;
t = new Thread(new Runnable() {
@Override
public void run() {
while (state!=TickManager.STATE_TICK_NONE) {
tickCount++;
try {
Thread.sleep(delay);
} catch (Exception e) {
process(e);
stopTicking();
}
process();
if (state == TickManager.STATE_TICK_ONCE && tickCount == 1) {
stopTicking();
}
}
}
});
t.start();
}
public void process(){
if(listeners!=null){
for(TickListener l : listeners){
l.tick();
}
}
}
public void process(Exception e){
if(listeners!=null){
for(TickListener l : listeners){
l.tick(e);
}
}
}
public void stopTicking(){
state = TickManager.STATE_TICK_NONE;
t=null;
}
public int getState() {
return state;
}
public int getDelay() {
return delay;
}
public Thread getThread() {
return t;
}
public TickListener[] getListeners() {
return listeners;
}
public long getTickCount() {
return tickCount;
}
public void setState(int state) {
this.state = state;
}
public void setTickCount(long tickCount) {
this.tickCount = tickCount;
}
public void setDelay(int delay) {
this.delay = delay;
}
public void addTickListener(TickListener t){
if(listeners!=null){
int l = listeners.length;
TickListener[] tl = new TickListener[l+1];
System.arraycopy(listeners, 0, tl, 0, l);
tl[l] = t;
listeners=tl;
}
else{
listeners=new TickListener[1];
listeners[0]=t;
}
}
}
您所要做的就是创建TickManager
的对象,在其中注册TickListener
并在其上调用startTicking()
。延迟也是通过构造函数设置的。
确保在滴答声时不要更改延迟时间。可以通过调用getState()
函数并将其与类常量进行比较来检查它。如果是,则必须将其停止,更改延迟并再次启动。