0
    public class StoreMessage extends Thread implements Serializable{

        private static long startNanotime=System.nanoTime();
        private static int timeToRun = 60000; // 1 minute
        private static long startTime = System.currentTimeMillis();
        private static long runUntilMillis = System.currentTimeMillis() + timeToRun;
        public static Map <Long,Message> map1=Collections.synchronizedMap(new TreeMap<Long,Message>());
        public static void store(Message message)throws Exception{
        while (true) {
                long now = System.currentTimeMillis();

                if (now >= runUntilMillis) {
                   break;
              }
                long preciseTime=TimeUnit.MILLISECONDS.toNanos(now)+(System.nanoTime()-startNanotime);
                map1.put(preciseTime, message);
            }
         }

        public static byte[] returning()throws Exception
        { 
            map1.clear();
            return Serializer.serialize(map1);
         }

   }        

此代码使用 in 将多个命令行参数存储到树形图并对其进行序列化。我如何修改它,使其在一分钟内存储收到的所有参数。无论是一次多个参数还是一个间隔几秒的参数?一旦一分钟结束,树形图是被清除和序列化。一旦清除,从下一分钟开始接收数据。例如。假设我的用户在晚上 9.19 开始输入他的数据,他同时输入了多条消息。他在 9.19.38 秒时输入了更多信息。然后假设他在晚上 9.20 输入了更多数据,然后停止。我的代码所做的是,它让他在晚上 9.19 输入多条消息,将其存储到树形图中,然后在一分钟后对其进行序列化,并且不允许他在 9.19.38 秒输入数据,但他能够输入数据19.20 在已清除的地图上。我正在做的是,存储他在晚上 9.19 收到的所有数据,等到 19.20..由于用户在 19.19.38 pm 输入更多消息,将它们写入同一个地图,然后在 19.20 序列化并清除它,所以我可以在 19.20 开始存储消息。我要做什么改变...?请帮我!

4

1 回答 1

0

有几种方法可以做到这一点。首先想到的是要有某种队列。向它扔内容。当最早的消息超过一分钟时,提取值得一分钟的时间将其扔到一个线程中以序列化它传递的任何内容。它不应该真正关心有多少。

据我所知,您正试图在一个“功能”中一次做太多事情。

于 2012-04-06T17:02:12.683 回答