class A { public Object value; public long receiveTime; }class PC1 { private A a; public Object getAValue() { if (a != null && System.currentTimeMillis() - a.receiveTime <= 20000) { return a.value; } return null; } public void setA(A a) { this.a = a; } }楼主明白我的意思没?
timer = new Timer(true);
timer.schedule(
new java.util.TimerTask() { public void run() { //server.checkNewMail(); 要操作的方法 } }, 0, 5*60*1000);
第一个参数是要操作的方法,第二个参数是要设定延迟的时间,第三个参数是周期的设定,每隔多长时间执行该操作。 使用这几行代码之后,Timer本身会每隔5分钟调用一遍server.checkNewMail()方法,不需要自己启动线程。Timer本身也是多线程同步的,多个线程可以共用一个Timer,不需要外部的同步代码。
2、
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务.
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任务在指定的时间开始进行重复的固定速率执行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.====================
用定时器应该可以实现这个功能,如果有数据,就把定时器的时间清空一次,如果没有,就不管它,时间到了,定义器会触发处理函数
关于timer的用法,上面的哥们说的很详细了,或者查询api就可以了。
timer.schedule(this, 1000, 1000);//这句话是在类的构造函数中的,这里的this应该怎么理解?
具体点吧!对象里可以加入一个属性来记录下最后一次接受数据的时间,
而这些对象应放在一个集合中,保证对象没有其他变量指向这些对象,
另外一个线程负责顶时查看集合里每一个对象的那个属性,如果和当前时间相差20秒,则将
这个对象从集合中移出,则此对象就没有变量指向它了,然后JVM会安排回收该对象。
public Object value;
public long receiveTime;
}class PC1 {
private A a; public Object getAValue() {
if (a != null && System.currentTimeMillis() - a.receiveTime <= 20000) {
return a.value;
}
return null;
} public void setA(A a) {
this.a = a;
}
}楼主明白我的意思没?
public void run()
{ //监听线程
while(server != null)
{
try{
//监听并接受客户端的请求
Socket soc = server.accept();
System.out.println("正在监听");
System.out.println( soc.getInetAddress().toString());
//为每个连接上来的客户端启动一个线程
//该线程用于和客户交换信息,故以该客户的socket为参数
new EveryClientThread(soc);
}catch(Exception e){e.printStackTrace();}
}
}
class EveryClientThread extends Thread //implements ServerTool
{ Socket sock ;
DataOutputStream writer;
ResultSet result;
ObjectInputStream in;
PreparedStatement ps;
public EveryClientThread(Socket s)
{
sock = s;
this.start();
}
public void run()
{
}
}
上面的代码比较乱,希望看的出点东西