java线程池任务队列
// 创建Callable任务 List<Callable<Void>> tasks = new ArrayList<>(); int numThreads = Runtime.getRuntime().availableProcessors(); // 获取处理器数量 //ExecutorService executor = Executors.newFixedThreadPool(numThreads);
ExecutorService pool = new ThreadPoolExecutor(numThreads, 2 * numThreads, 1000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
tasks.add(() -> { ...... return null; });
Runnable task = new Runnable() {
@Override
public void run() {
..................
}
};
@Override
public void run() {
..................
}
};
try {
ClientInstanceMgr.getInstance().pool1.execute(task);
} catch (Exception e) {
log.error(TimeConvertUtil.getTimeStrNow() +",10Data,error:" +e.getMessage());
}
ClientInstanceMgr.getInstance().pool1.execute(task);
} catch (Exception e) {
log.error(TimeConvertUtil.getTimeStrNow() +",10Data,error:" +e.getMessage());
}
//执行任务并等待完成 try { pool.invokeAll(tasks); } catch (Exception e) { e.printStackTrace(); } // 关闭线程池 pool.shutdown();
@Slf4j public class ClientInstanceMgr { public ExecutorService pool = null; private static class ClientInstanceMgrHolder { private static final ClientInstanceMgr m_instance = new ClientInstanceMgr(); } public static ClientInstanceMgr getInstance() { return ClientInstanceMgrHolder.m_instance; } private ClientInstanceMgr() { int numThreads = Runtime.getRuntime().availableProcessors(); // 获取处理器数量 log.info("[ClientInstanceMgr]numThreads " + numThreads ); pool = new ThreadPoolExecutor(numThreads, 10 * numThreads, 1000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy()); } private final ReentrantLock m_ClientInstanceLock = new ReentrantLock(); private final ConcurrentHashMap<Channel, ClientInstance> m_hmClientInstance = new ConcurrentHashMap<Channel, ClientInstance>(); public void addClientInstance(Channel _channel, ClientInstance _oClientInstance) { m_hmClientInstance.put(_channel, _oClientInstance); } public void removeClientInstance(Channel _channel) { m_hmClientInstance.remove(_channel); } public ClientInstance getClientInstance(Channel _channel) { return m_hmClientInstance.get(_channel); } public boolean update(Channel key, ClientInstance newClientInstance){ newClientInstance.updateTime(); ClientInstance oldClientInstance = m_hmClientInstance.get(key); if (oldClientInstance != null) { return m_hmClientInstance.replace(key, oldClientInstance, newClientInstance); } return false; } public LinkedList<ClientInstance> getClientInstanceList() { LinkedList<ClientInstance> lstClientInstance = null; m_ClientInstanceLock.lock(); try { if (!m_hmClientInstance.isEmpty()) { lstClientInstance = new LinkedList<ClientInstance>(); Iterator<Map.Entry<Channel, ClientInstance>> iter = m_hmClientInstance.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<Channel, ClientInstance> entry = iter.next(); ClientInstance oClientInstance = entry.getValue(); if(oClientInstance != null && oClientInstance.getChannel() != null && StringUtils.isNotBlank(oClientInstance.getTern())) { lstClientInstance.add(oClientInstance); } } } } finally { m_ClientInstanceLock.unlock(); } return lstClientInstance; } }
posted on 2025-08-19 09:17 yebinghuai-qq-com 阅读(21) 评论(0) 收藏 举报
浙公网安备 33010602011771号