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

   }        

このコードは、複数のコマンド ライン引数をツリー マップに格納し、シリアル化します。受信したすべての引数を 1 分間に格納するように変更するにはどうすればよいですか?一度に複数の引数を指定するか、数秒の間隔を空けて 1 つずつ指定しますか?1 分が経過すると、ツリー マップはクリアしてシリアライズ。そしてクリアすると、次の分からデータの受信を開始します。例えば。ユーザーが午後 9 時 19 分にデータの入力を開始し、同時に複数のメッセージを入力したとします。彼は、たとえば 9.19.38 秒でさらに入力します。次に、彼が午後 9 時 20 分にさらにデータを入力し、その後停止したとします。私のコードは、午後 9 時 19 分に複数のメッセージを入力し、それをツリー マップに保存し、1 分後にシリアル化し、9 時 19 分 38 秒にデータを入力することを許可しませんが、データを入力することはできます。クリアマップの19.20に。私が検討していたのは、午後 9 時 19 分に受信したすべてのデータを保存し、午後 19 時 19 分 38 秒にユーザーがさらにメッセージを入力したため、19 時 20 分まで待ち、それらを同じマップに書き込み、19 時 20 分にシリアル化してクリアすることでした。 19.20 にメッセージの保存を開始できます。どのような変更を加えますか? 私を助けてください!

4

1 に答える 1

0

それを行ういくつかの方法。最初に考えたのは、ある種のキューを持つことです。それにコンテンツを投げます。最初のメッセージが 1 分を超える場合は、1 分を抽出してスレッドにスローし、渡されたメッセージをシリアル化します。いくらあっても構わないはずです。

私が見る限り、単一の「関数」で一度に多くのことをしようとしています。

于 2012-04-06T17:02:12.683 に答える