您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
ExecutorService
是 Java 并发包 java.util.concurrent
中的一个接口,它提供了一种将任务提交给线程池执行的方式。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程的主要优点是减少了创建和销毁线程的次数,大大提高了系统性能。
ExecutorService
线程池的原理主要包括以下几个方面:
ExecutorService
使用一个阻塞队列来存储待执行的任务。LinkedBlockingQueue
)或有界队列(如 ArrayBlockingQueue
)。setCorePoolSize
和 setMaximumPoolSize
方法动态调整。ExecutorService
提供了四种拒绝策略:
AbortPolicy
:默认策略,抛出 RejectedExecutionException
。CallerRunsPolicy
:由调用线程执行被拒绝的任务。DiscardPolicy
:直接丢弃被拒绝的任务。DiscardOldestPolicy
:丢弃队列中最老的任务,然后重新尝试提交被拒绝的任务。ExecutorService
提供了 shutdown
和 shutdownNow
方法来控制线程池的生命周期。
shutdown
:平滑地关闭线程池,不再接受新任务,但会等待已提交的任务执行完毕。shutdownNow
:立即关闭线程池,尝试停止所有正在执行的任务,并返回等待执行的任务列表。ThreadPoolExecutor
提供的方法来监控线程池的状态,如 getActiveCount
、getCompletedTaskCount
、getTaskCount
等。import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交10个任务
for (int i = 0; i < 10; i++) {
final int taskNumber = i;
executor.submit(() -> {
System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskNumber + " is completed");
});
}
// 关闭线程池
executor.shutdown();
}
}
通过理解这些原理,可以更好地利用 ExecutorService
来优化多线程应用程序的性能和资源管理。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。