我在一个"池线程中使用同步"和主线程。在池线程中我使用synchronization(locker)
锁定部分,然后执行:
synchronization(locker){
QueuePool.shutdownNow();
while(!QueuePool.isShutDown()){}
//do something after
QueuePool.SetThreadQueue(null);
QueuePool queue = QueuePool.GetThreadQueue();
Pallets pallets = Pallets.GetPallets(context);
////////////////////////////////////////////////////////////////////////////////////
for (String key : pallets.getPalletsToSend().keySet()) {
for (HashMap<String, String> object : pallets.getPalletsToSend().get(key)) {
PalletSender sender = new PalletSender(object, context);
queue.addTask(sender);
}
}
}
并且在主线程上,此同步是在按钮单击时:
synchronized (QueuePool.locker2){QueuePool.GetThreadQueue().addTask(palletSender);}
QueuePool是一个拥有ThreadPoolExecution的单例。在SetThreadQqueue中,我清除null上的单例实例。
池线程每2分钟运行一次。它可能首先进入池线程。那么等待while(!QueuePool(isShutDown())
需要多长时间?也许我可以添加一些代码来在该循环中添加一个条件?我不确定我是否正确。让我知道什么是最好的。