使用线程每隔一分钟序列化一个树图

时间:2012-04-02 09:44:52

标签: java multithreading time treemap

我试图将一分钟内获得的Message类的所有对象存储到树映射中,而不是作为键的精确时间。完成一分钟后,我试图中断线程并将映射序列化为{ {1}}到byte [],我想返回到调用类。

ObjectOutputStream

为什么这段代码不起作用?
它给了我 public class StoreMessage { private static long start_nanotime=System.nanoTime(); private static Thread thisThread = Thread.currentThread(); private static int timeToRun = 60000; // 1 minute private static byte[] b=null; public static Map <Long,Message> map1=new TreeMap<Long,Message>(); public static byte[] store(Message message){ new Thread(new Runnable(){ public void run(){ try{ sleep(timeToRun); thisThread.interrupt(); b=serializer.serialize(map1); } catch(Exception e){ e.printStackTrace(); } } }).start(); while (!Thread.interrupted()) { long precise_time=TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis())+(System.nanoTime()-start_nanotime); map1.put(precise_time, message); } return b; } }

1 个答案:

答案 0 :(得分:1)

这段代码非常有道理:

  1. 为什么你在没有明显理由的情况下在附上的课程中延长Thread并实施Serializable
  2. 为什么你的线程在完成睡眠后会中断父母?在我看来,你正在做一个非常复杂的控制流操作。
  3. 我建议采用一种更简单的方法,使用ScheduledThreadPoolExecutor每分钟运行序列化任务,而主线程不断用新消息更新地图。

    经过一些学习后,我了解你的程序是如何工作的,但是很难理解控制的流程。