我试图将一分钟内获得的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;
}
}
答案 0 :(得分:1)
这段代码非常有道理:
Thread
并实施Serializable
?我建议采用一种更简单的方法,使用ScheduledThreadPoolExecutor
每分钟运行序列化任务,而主线程不断用新消息更新地图。
经过一些学习后,我了解你的程序是如何工作的,但是很难理解控制的流程。