在序列化之前的一整分钟内将数据存储在树图输入中

时间:2012-04-06 16:37:36

标签: java time treemap

    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);
         }

   }        

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

1 个答案:

答案 0 :(得分:0)

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

就我所见,你试图在一个“功能”中同时做太多事情。