Пока я тестирую свой код в Eclipse, я остановил программу в консоли, но обнаружил, что потоки продолжают работать. Я пытаюсь создать конвейер для прецессии для наших постоянно входящих данных. Как я могу остановить все текущие потоки, когда останавливаю программу?Что произойдет с ExecutorService, если я остановлю запущенный проект java
(Особенно, когда я использую бесконечный цикл)
Вот моя главная:
public static void main(String[] args) {
queue = new ArrayBlockingQueue<StreamQueueItem>(100);
LogFileProcessor threadFileProcessor = new LogFileProcessor(queue);
new Thread(threadFileProcessor).start();
StreamCoordinator threadStreamCoordinator = new StreamCoordinator(queue);
new Thread(threadStreamCoordinator).start();
}
В основном первая нить держит Ставить на BlockingQueue, а вторая тема держит предметы выскочить из очереди и выберите отправителя запроса для отправки запроса.
Код StreamCoordinator:
public StreamCoordinator(BlockingQueue<StreamQueueItem> mQueue) {
super();
this.mQueue = mQueue;
this.mThreadPool = Executors.newFixedThreadPool(ConfigConstants.SENDER_THREDPOOL_SIZE);
mBqHelper = new BigqueryHelper(ConfigConstants.PROJECT_ID,ConfigConstants.DATA_SET, ConfigConstants.TABLE_EXISTS);
}
@Override
public void run() {
StreamQueueItem item = null;
while(true){
//wait 1 second for next request
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
item = mQueue.poll();
if(item != null){
mThreadPool.execute(new RequestSender(mBqHelper,item));
}
}
}
RequestSender:
@Override
public void run() {
System.out.format("%d is sending request %s . List size: %d %s\n",mSenderId,FormatHelper.currentDate(),mRequestItem.getRowList().size(),mRequestItem.getLogReason().getTableName());
mBqHelper.submitStreamRequest(mRequestItem.getLogReason().getTableName(), mRequestItem.getRowList());
System.out.println("# " + mSenderId + " done. " + FormatHelper.currentDate());
}
«остановить проект Java»? Это нуждается в некоторых разъяснениях. – marekful
Если вы убили JVM, потоки все еще не работают. –
Я просто нажал на стоп в консоли Eclipse. Май JVM не убит, потому что Eclipse все еще открыт – foxwendy