PC1中的A数据是通过PC2定时(假设每20s传送一遍)socket通信传过来的,如果PC2经过20s之后不再向PC1发送A数据了,那么A数据就自动从PC1中消失。
就是这么个情况,但是具体不知道用java该怎么实现?
还望各位大虾帮帮忙
能给个例子最好
谢谢了

解决方案 »

  1.   

    、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。private java.util.Timer timer;
    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)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.====================
    用定时器应该可以实现这个功能,如果有数据,就把定时器的时间清空一次,如果没有,就不管它,时间到了,定义器会触发处理函数
      

  2.   

    收到的数据加入时间戳,用一个一秒钟的timer,每隔一秒钟扫描一次,发现当前时间减去得到上次得到数据的时间戳,则清楚该数据。
    关于timer的用法,上面的哥们说的很详细了,或者查询api就可以了。
      

  3.   

     Timer timer = new Timer();
     timer.schedule(this, 1000, 1000);//这句话是在类的构造函数中的,这里的this应该怎么理解?
      

  4.   

    不太明白你的意思,不理解你说的数据指的是什么……引用类型还是基本类型对象呢?
    具体点吧!对象里可以加入一个属性来记录下最后一次接受数据的时间,
    而这些对象应放在一个集合中,保证对象没有其他变量指向这些对象,
    另外一个线程负责顶时查看集合里每一个对象的那个属性,如果和当前时间相差20秒,则将
    这个对象从集合中移出,则此对象就没有变量指向它了,然后JVM会安排回收该对象。
      

  5.   

    使用java.util.Timer工具类并编写相应的监听器类,来处理一定时间之后看是否监听到对应的PC是否发送数据若是没发送,做相应处理
      

  6.   

    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;
        }
    }楼主明白我的意思没?
      

  7.   

     
      
     
    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()
        {   
        }
    }
    上面的代码比较乱,希望看的出点东西