gpt4 book ai didi

java - 如果我停止正在运行的 java 项目,ExecutorService 会发生什么情况

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:12 25 4
gpt4 key购买 nike

当我在 Eclipse 中测试代码时,我在控制台中停止了程序,但我发现线程仍然继续工作。我正在尝试创建一个管道来处理我们不断传入的数据。如何在停止程序时关闭所有正在运行的线程?

(特别是当我使用无限循环时)

这是我的主要内容:

    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));
}
}

}

请求发送者:

@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());
}

最佳答案

这是邪恶的代码:

} catch (InterruptedException e) {
e.printStackTrace();
}

如果您捕获 InterruptedException,您必须正确处理它。记录它并忽略它会导致你的程序行为异常。如果告诉您的线程需要停止(即您按下了红色按钮),则该异常是运行时的方式。

尝试对异常做出适当的 react :

} catch (InterruptedException e) {
return;
}

这是一篇关于该主题的优秀文章,非常值得一读:Java theory and practice: Dealing with InterruptedException

关于java - 如果我停止正在运行的 java 项目,ExecutorService 会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com