2022-08-13发表2025-05-25更新java3 分钟读完 (大约440个字)线程池问题探究发现问题123456789101112131415161718192021222324252627282930313233 Semaphore semaphore = new Semaphore(nThread);//定义几个许可//这里 ExecutorService executorService =new ThreadPoolExecutor(1, nThread, 1000L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(1));//创建一个固定的线程池 for (T obj : list) { try { semaphore.acquire(); executorService.execute(() -> { try { func.accept(obj); } catch (Exception ex) { Logger.error("startWithMultiThread 出错!"+ex.getMessage()); } finally { semaphore.release(); } }); } catch (InterruptedException e) { Logger.error("startWithMultiThread 出错!"+e.getMessage()); } } public static void main(String[] args) { ArrayList<Object> objects = Lists.newArrayList(); for (int i = 0; i < 1000; i++) { objects.add(i); } startWithMultiThread(objects,5, obj -> { Threads.sleep(1000); System.out.println(obj); });}阅读更多
2022-08-12发表2025-05-25更新java14 分钟读完 (大约2115个字)线程池源码解读线程池的在 Java并发中使用最多的一种手段,也是性能和易用性相对来说比较均衡的方式,下面我们就一起探索先线程池的原理。 线程池分配线程流程对于线程池的使用,在这篇文章中就不过多的赘述,首先我们先看下线程池的分配线程的逻辑。 我们知道,在创建线程池的有 7 个核心的参数:阅读更多