如何创建一个Java线程池?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个Java线程池?相关的知识,希望对你有一定的参考价值。

参考技术A 程序由三个类构成:
第一个是TestThreadPool类,它是一个测试程序,用来模拟客户端的请求,当运行它时,系统首先会显示线程池的初始化信息,然后提示从键盘上输入字符串,并按下回车键,这时会发现屏幕上显示信息,告诉某个线程正在处理的请求,如果快速地输入一行行字符串,那么会发现线程池中不断有线程被唤醒,来处理的请求,创建了一个拥有10个线程的线程池,如果线程池中没有可用线程了,系统会提示相应的警告信息,但如果稍等片刻,那会发现屏幕上会陆陆续续提示有线程进入了睡眠状态,这时又可以发送新的请求了。
第二个类是ThreadPoolManager类,顾名思义,它是一个用于管理线程池的类,它的主要职责是初始化线程池,并为客户端的请求分配不同的线程来进行处理,如果线程池满了,它会对发出警告信息。
最后一个类是SimpleThread类,它是Thread类的一个子类,它才真正对客户端的请求进行处理,SimpleThread在示例程序初始化时都处于睡眠状态,但如果它接受到了ThreadPoolManager类发过来的调度信息,则会将自己唤醒,并对请求进行处理。

什么叫线程池?线程池如何使用?

1、什么是线程池: java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池
多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。
如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。
一个线程池包括以下四个基本组成部分:
1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;
2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
4、任务队列(taskQueue):用于存放没有处理的任务。提供一种缓冲机制。
线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。
线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目,看一个例子:
假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池大小是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。
参考技术A 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。” 参考技术B 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。” 参考技术C

你好,可以阅读以下博客,个人觉得这博客能帮助你了解如何使用线程池

线程池

如果满意,望采纳,谢谢!

参考技术D 多线程技术主要解决处理器单元多个线程执行的问题,它可以显著减少处理器单元闲置时间,增加处理器单元的吞吐能力。在减少了创建和销毁线程次数,每个工作线程都可以重复被利用,可执行多个线程,可以根据系统的承受能力,调整线程池的数目,防止消耗多的内存,而把服务器过于繁忙。

以上是关于如何创建一个Java线程池?的主要内容,如果未能解决你的问题,请参考以下文章

java创建线程池都有哪些

java 如何获得线程池中正在执行的线程数?

java 线程池

Java线程池详解

Java线程池详解

Java 线程线程池初探