如何让Java的线程池顺序执行任务 ?
方案一、使用单线程线程池
我们可以使用 SingleThreadExecutor 这种线程池来执行任务,因为这个线程池中只有一个线程,所以它可以保证任务可以按照提交任务被顺序执行。
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(task1);
executor.submit(task2);
executor.submit(task3);
// 任务按照提交的顺序逐个执行
executor.shutdown();
方案二、使用有依赖关系的 newScheduledThreadPool任务调度方式
可以使用 ScheduledThreadPoolExecutor结合ScheduledFuture 来实现任务的顺序执行。将任务按照顺序提交给线程池,每个任务的执行时间通过ScheduledFuture的get()方法等待前一个任务完成。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> future1 = executor.schedule(task1, 0, TimeUnit.MILLISECONDS);
ScheduledFuture<?> future2 = executor.schedule(task2, future1.get(), TimeUnit.MILLISECONDS);
ScheduledFuture<?> future3 = executor.schedule(task3, future2.get(), TimeUnit.MILLISECONDS);
// 任务会按照依赖关系和前一个任务的执行时间逐个执行
executor.shutdown();  
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号