多线程的使用场景及线程池的使用

线程作为进程内的执行单元,其资源消耗比进程低,并且可以共享进程资源。
线程管理器负责创建和销毁线程池以及添加新任务。
工作线程是线程池中的活动线程,在循环中连续执行任务。
任务接口定义了任务的进入和终止操作。
任务队列用于存储等待执行的任务。
多线程和线程池配置场景:为什么使用线程池?线程池可以减少频繁的线程创建和销毁,提高执行效率。
线程池核心字段包括:corePoolSize(核心线程数)、maxPoolSize(最大线程数)、QueueCapacity(队列大小)、keepAliveSecond(线程最大空闲时间)。
常用的线程池监控状态包括:活动线程数(activeCount)、线程总数(poolSize)、要执行的任务数(taskCount)、已完成任务数(compatedTaskCount)、有史以来创建的最大线程数(largePoolSize))。
根据实际场景,您可以选择合适的拒绝策略,例如CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy等。
线程的创建方法包括:实现Runnable接口、继承Thread类、实现Callable接口。
JDK1.5之后,引入了Executor框架线程池,将提交线程和执行线程分离。
线程池执行方式包括:单线程执行、固定线程数线程池、缓存线程池和无限线程池。
停止线程有两种方法:shutDown()、shutDownNow()。
CountDownLatch用于同步多个线程并等待另一个线程完成一组操作。
Sleep()、Wait()、Join()、Yield()是线程的常用方法。
注意:Wait()、notifyAll和notify()属于Object类,必须指定它们自己的键。

什么是线程池

线程池是多线程的一种形式,它在处理期间将任务添加到队列中,然后在创建线程后自动启动这些任务。
线程池中的线程是后台线程。
每个线程都使用默认的堆栈大小,以默认的优先级运行,并且位于多线程单元中。
如果托管代码中的线程处于空闲状态(例如等待事件),线程池将插入另一个工作线程以使所有处理器保持忙碌。
如果线程池中的所有线程始终保持忙碌,但队列中包含待处理的工作,则线程池将在一段时间后创建另一个工作线程,但线程数永远不会超过最大值。
超过最大值的线程可以排队,但在其他线程完成之前它们不会启动。