У меня есть требование следующимзацикливания в Java для определенной продолжительности и определенной задачи
loop(N times)
{
for(1 minute)
{
write certain values to a tree map
}
for(exactly after that above 1 min task)
{
serialize the tree map
return the tree map
create a new tree map
}
}
Как я этого добиться?
Это то, что я сделал до сих пор ..
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);
new TreeMap<Long,Message>();
} 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;
}
}
Я пытался сохранить все объекты JMS из класса Message за полученный в одну минуту на карте дерева против его точного времени как key.After завершение одной минуты, я хочу сериализовать карту и вернуть байт [] в другой класс. Тем временем я создаю новую карту деревьев для хранения следующего набора сообщений JMS в течение минуты. Этот код является некоторым, как не работает. Это дает мне ошибку java.lang.OutOfMemoryError: Java heap space. Также я заметил, что он продолжает писать только одно сообщение на карту, то есть, если сообщения были «привет», «хороший день для вас» - это два сообщения jms; класс StoreMessage получает одно сообщение за раз. Сначала он получит «привет», и как только это сообщение будет обработано, оно будет получать следующее сообщение. Но я заметил, что в течение одной минуты, когда поток не прерывается, он записывает только первое сообщение на карту и дает ошибку. Как это исправить?
Что вы написали до сих пор? – doNotCheckMyBlog
Прочитав [соответствующие учебники Java] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html) [и Javadoc] (http://docs.oracle.com/javase/6 /docs/api/java/lang/Object.html#wait%28long%29) сначала? –
Одна минута 60 секунд. Таким образом, хотя разность времени ниже 60 секунд. сделать некоторые операции. –