在Java中,如果每个请求到达就会创建一个新线程,开销是相当大的。

  线程池就是来解决生命周期开销问题和资源不足问题。通过多任务重复使用线程,线程创建的开销被分摊到多个任务上,而且由于在请求到达前时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,是应用程序响应更快。

  通过适当的调整线程中的线程数目,可以防止资源不足的情况。

  当服务器接受到大量短小的请求时,使用线程池技术是非常合适的,他可以大大减少线程的创建和销毁次数,提高服务器的工作效率。  

  一个比较简单线程池应该包括:

    线程池管理器:

      创建、销毁并管理线程池,将工作线程放入池中

    工作线程:

      一个可以循环执行任务的线程,在没有任务时进行等待

    任务队列:

      提供一种缓冲机制,将没有处理的任务放在任务队列中

    任务接口:

      每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行

   简易线程池代码:

 1 package com.chinasofti.executor;
 2 
 3 public class ExecutorThread extends Thread {
 4     // 创建一个属性表示是否运行项目
 5     boolean isRunning = false;
 6     // 创建一个Runnable接口表示执行的方法
 7     private Runnable run;
 8 
 9     public synchronized void setRunning(boolean running) {
10         isRunning = running;
11         // 如果运行项目运行 那么就唤醒线程
12         if(isRunning){
13            this.notify();
14         }
15     }
16 
17     public boolean isRunning() {
18         return isRunning;
19     }
20 
21     public Runnable getRun() {
22         return run;
23     }
24 
25     public void setRun(Runnable run) {
26         this.run = run;
27     }
28 
29     @Override
30     public synchronized void run() {
31         while (true){
32             // 如果项目运行 就执行规定的方法
33             if(isRunning){
34                 this.run.run();
35                 isRunning = false;
36             // 否则就继续等待
37             }else {
38                 try {
39                     this.wait();
40                 } catch (InterruptedException e) {
41                     e.printStackTrace();
42                 }
43             }
44         }
45     }
46 }
View Code

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2021-12-14
  • 2021-11-13
  • 2021-09-12
  • 2021-07-02
  • 2021-08-05
  • 2022-01-03
猜你喜欢
  • 2021-06-04
  • 2021-09-19
  • 2021-12-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
相关资源
相似解决方案