19 package org.matsim.core.events;
21 import java.lang.InterruptedException;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.concurrent.BlockingQueue;
26 import java.util.concurrent.LinkedBlockingQueue;
37 class ProcessEventThread
implements Runnable {
38 private final List<Event> preInputBuffer;
39 private final BlockingQueue<Event> eventQueue;
40 private final EventsManager events;
41 private final int preInputBufferMaxLength;
43 public ProcessEventThread(
44 final EventsManager events,
45 final int preInputBufferMaxLength) {
47 this.preInputBufferMaxLength = preInputBufferMaxLength;
48 eventQueue =
new LinkedBlockingQueue<Event>();
49 preInputBuffer =
new ArrayList<Event>( preInputBufferMaxLength + 1);
52 public synchronized void processEvent(
final Event event) {
57 preInputBuffer.add(event);
58 if (preInputBuffer.size() > preInputBufferMaxLength) {
63 private void emptyPreBuffer() {
64 eventQueue.addAll( preInputBuffer );
65 preInputBuffer.clear();
76 Event nextEvent = eventQueue.take();
77 if (nextEvent instanceof LastEventOfIteration) {
78 Gbl.printCurrentThreadCpuTime();
83 if (eventQueue.size()>0){
84 processEvent(nextEvent);
86 nextEvent = eventQueue.take();
91 getEvents().processEvent(nextEvent);
94 catch ( InterruptedException e ) {
103 public synchronized void close() {
104 processEvent(
new LastEventOfIteration(0.0));
108 public EventsManager getEvents() {