Вечер,
Я пытаюсь создать временную метку, когда объект добавляется в мой PriorityQueue, используя следующий формат SimpleDate: [гггг / мм / дд - чч: мм: сс а] (примеры результатов ниже)
Нано-секундная точность НЕ 100% необходима
1: 2012/03/09 - 09:58:36 PM
Знаете ли вы, как я могу сохранить временную метку «истекшее время», которая показывает, когда клиенты были добавлены в PriorityQueue?
В потоках StackOverflow, с которыми я сталкивался, большинство говорят, что используют System.nanoTime (); хотя я не могу найти ресурсы в Интернете для реализации этого в SimpleDateFormat. Я также консультировался с коллегами.
Кроме того, я прошу прощения за то, что не использовал подсветку синтаксиса (если S.O поддерживает это)
Отрывок кода [неиспользуемые методы опущены]:
<!-- language: java -->
package grocerystoresimulation;
/*****************************************************************************
* @import
*/
import java.util.PriorityQueue;
import java.util.Random;
import java.util.ArrayList;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
/************************************************************************************
public class GroceryStoreSimulation {
/************************************************************************************
* @fields
*/
private PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
private Random rand = new Random(); //instantiate new Random object
private Date date = new Date();
private DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd - hh:mm:ss a");
private ArrayList<String> timeStamp = new ArrayList<String>(); //store timestamps
private int customersServed; //# of customers served during simulation
/************************************************************************************
* @constuctor
*/
public GroceryStoreSimulation(){
System.out.println("Instantiated new GroceryStoreSimulation @ ["
+ dateFormat.format(date) + "]\n" + insertDivider());
//Program body
while(true){
try{
Thread.sleep(generateWaitTime());
newCustomer(customersServed);
} catch(InterruptedException e){/*Catch 'em all*/}
}
}
/************************************************************************************
* @param String ID
*/
private void newCustomer(int ID){
System.out.println("Customer # " + customersServed + " added to queue. . .");
pq.offer(ID); //insert element into PriorityQueue
customersServed++;
assignArrivalTime(ID); //call assignArrivalTime() method
} //newCustomer()
/************************************************************************************
* @param String ID
*/
private void assignArrivalTime(int ID){
timeStamp.add(ID + ": " + dateFormat.format(date));
System.out.println(timeStamp.get(customersServed-1));
} //assignArrivalTime()
/************************************************************************************
* @return int
*/
private int generateWaitTime(){
//Local variables
int Low = 1000; //1000ms
int High = 4000; //4000ms
int waitTime = rand.nextInt(High-Low) + Low;
System.out.println("Delaying for: " + waitTime);
return waitTime;
}
//***********************************************************************************
private static String insertDivider(){
return ("******************************************************************");
}
//***********************************************************************************
} //GroceryStoreSimulation
Проблема:
- Отметка времени не обновляется , только представляет начальное время выполнения (см. Ниже)
- Задержка на 1-4 секунды с Thread.sleep (xxx) (генерируется псевдослучайно)
- Проблема может быть в методе assignArrivalTime ()
Выход:
run:
Instantiated new GroceryStoreSimulation @ [2012/03/09 - 09:58:36 PM]
******************************************************************
Delaying for: 1697
Customer # 0 added to queue. . .
0: 2012/03/09 - 09:58:36 PM
Delaying for: 3550
Customer # 1 added to queue. . .
1: 2012/03/09 - 09:58:36 PM
Delaying for: 2009
Customer # 2 added to queue. . .
2: 2012/03/09 - 09:58:36 PM
Delaying for: 1925
BUILD STOPPED (total time: 8 seconds)
Спасибо за вашу помощь, надеюсь, мой вопрос достаточно ясен, и я в достаточной степени следовал вашим правилам форматирования.