为了清晰地展示 Java 线程池的结构关系,可以使用以下 ER 图表示它们之间的关系: THREAD_POOLstringnameintsizeenumpoolTypeTASKstringnameintdurationexecutes 上图展示了线程池和任务之间的关系:每个线程池可以执行多个任务,而每个任务只能由一个线程池执行。 结论 线程池的命名在 Java 多线程编程中占有重要地位。合理的...
public class ThreadLocal<T> { // 用于存储当前线程的ThreadLocalMap private static final ThreadLocal<ThreadLocalMap> map = new ThreadLocal<>(); // 初始化当前线程的ThreadLocalMap static void createMap() { map.set(new ThreadLocalMap()); } // 获取当前线程的ThreadLocalMap static ThreadLocalMap...
ThreadName:pool-1-thread-1priority:7,ThreadName:pool-1-thread-1priority:6,ThreadName:pool-1-thread-1priority:5,ThreadName:pool-1-thread-1priority:4,ThreadName:pool-1-thread-1priority:3,ThreadName:pool-1-thread-1priority:2,ThreadName:pool-1-thread-1priority:1,ThreadName:pool-1-thread-...
public class ScheduledThreadPool { // corePoolSize = 2 private static ScheduledExecutorService service = Executors.newScheduledThreadPool(2); public static void main(String[] args) { System.out.println("Thread - "+Thread.currentThread().getName()+" BEGIN "+ new Date()); service.schedule(new...
ThreadFactory guavaThreadFactory = new ThreadFactoryBuilder().setNameFormat("retryClient-pool-").build();ExecutorService exec = new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(10),springThreadFactory);exec.submit(() -> {logger.info("--记忆中的颜色是什么...
getName() + "-->>>" + num); }); } executorService.shutdown(); } 输出: pool-1-thread-1-->>>1 pool-1-thread-1-->>>2 pool-1-thread-1-->>>3 pool-1-thread-1-->>>4 pool-1-thread-1-->>>5 pool-1-thread-1-->>>6 pool-1-thread-1-->>>7 pool-1-thread-1-->...
newSingleThreadExecutor()创建一个单线程化的Executor。 newScheduledThreadPool(int corePoolSize) 创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。 类看起来功能还是比较强大的,又用到了工厂模式、又有比较强的扩展性,重要的是用起来还比较方便,如: ...
Thread t = new Thread(r); // 这里设置了线程池名称,使用counter区分不同线程 t.setName(String.format(builder.getNameFormat(), counter.getAndIncrement())); return t; }; } } 查看源码ExecutorService源码,发现预留了线程工厂的入参 // ExecutorService newFixedThreadPool 预留了ThreadFactory ...
System.out.println(t.getName() + " has been created"); return t; } } public static class MyIgnorePolicy implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { doLog(r, e);
keepAliveSeconds;// 线程池对拒绝任务(无线程可用)的处理策略@Value("${threadPoolConfig.rejectedExecutionHandler}")private String rejectedExecutionHandler;@Bean(name = "threadPoolTaskExecutor")@ConditionalOnProperty(prefix = "threadPoolTaskExecutor", name = "enabled", havingValue = "true")public Thread...