当前位置: 首页 > news >正文

freenom网站建设php软件安装

freenom网站建设,php软件安装,网站搭建前景,巩义服务专业网站建设什么是线程池,这个池字是什么 线程池,主要利用池化思想,线程池,字符串常量池等 为什么要有一个线程池? 正常线程的创建:1,手动创建一个线程 2.给该线程分配任务,线程执行任务 3…
什么是线程池,这个池字是什么

线程池,主要利用池化思想,线程池,字符串常量池等

为什么要有一个线程池?

正常线程的创建:1,手动创建一个线程

2.给该线程分配任务,线程执行任务

3.执行完成,手动释放线程

有了线程池后,默认线程数为3,最大线程数为5,等待队列为6,在正常状态下,我们只有三个默认线程去处理任务,流程是这样的:

1.等待队列按照顺序分出任务给空闲线程,直到任务为空或者无空闲线程

2.线程执行完任务后不会销毁,而是继续执行任务,如果此时没有任务,那么线程进入空闲状态,不会被销毁

如果任务变多,等待队列满呢

此时只有三个线程,但是任务队列已经满了,证明在这个状态下只有三个线程工作是不够的,所以我们开启最大线程数,全部开始处理任务,如果此时仍然想有任务进入队列,拒绝。

在将任务处理完毕后,队列处于空闲或者任务很少的状态,销毁线程,使当前的线程数为默认线程数

优点:

提高线程利用率

提高响应速度(省去创建线程的时间了)

控制并发数(控制最大线程数量)

便于统一管理(都位于线程池中)

代码实现:
package org.my;import java.util.ArrayList;
import java.util.Collections;import java.util.LinkedList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicLong;import java.util.stream.Collectors;/*** 创建了num个线程* 每个线程做woker这个任务* 而woker这个任务是不断取jobs中的一个任务进行执行* 直到jobs为空,然后进入等待状态* 如果jobs又重新exe添加了新job* jobs唤醒worker可以开始运行* 线程就可以继续开始工作。*/
public class ThreadPoolLearn313<Job extends Runnable> implements ThreadPool<Job> {//最大线程数量private static final int MAX_WORKER_NUMBERS = 10;//默认线程数private static final int DEFAULT_WORKER_NUMBERS = 5;//最小线程数private static final int MIN_WORKER_NUMBERS = 1;//任务队列private final LinkedList<Job> jobs =new LinkedList<>();private final List<Worker> workers = Collections.synchronizedList(new ArrayList<Worker>());//AtomicLong可理解为加了synchronized的longprivate AtomicLong threadNum = new AtomicLong();private  int workerNum = DEFAULT_WORKER_NUMBERS;public ThreadPoolLearn313() {initializeWorkers(DEFAULT_WORKER_NUMBERS);}private void initializeWorkers(int num) {for (int i = 0; i < num; i++) {Worker worker = new Worker();workers.add(worker);Thread thread = new Thread(worker,"ThreadPool-Worker-"+threadNum.incrementAndGet());thread.start();}}public ThreadPoolLearn313(int num) {this.workerNum = num>MAX_WORKER_NUMBERS?MAX_WORKER_NUMBERS:num<MIN_WORKER_NUMBERS?MIN_WORKER_NUMBERS:num;initializeWorkers(workerNum);}@Overridepublic void execute(Job job) {if (job!=null){synchronized (jobs){jobs.addLast(job);jobs.notify();}}}//关闭线程池@Overridepublic void shutdown() {for (Worker worker : workers) {worker.shutdown();}}@Overridepublic void addWorks(int num) {synchronized (jobs){if(num+workerNum>MAX_WORKER_NUMBERS){num =MAX_WORKER_NUMBERS-workerNum;}initializeWorkers(num);workerNum+=num;}}@Overridepublic void removeWorks(int num) {synchronized (jobs){if(num>=workerNum){throw new IllegalArgumentException("beyond workNum");}int count=0;while (count<num){Worker worker = workers.get(count);if(workers.remove(worker)){worker.shutdown();count++;}}workerNum-=count;}}@Overridepublic int getJobSize() {return jobs.size();}class Worker implements Runnable{private volatile  boolean running = true;@Overridepublic void run() {while (running){Job job =null;synchronized (jobs){while (jobs.isEmpty()){try {jobs.wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();return;}}job = jobs.removeFirst();}if(job!=null){job.run();}}}public  void  shutdown(){running = false;}}
}

http://www.yayakq.cn/news/740280/

相关文章:

  • 网站建设如何设置登录页面广州制作公司网站的公司
  • 网站导航还值得做wordpress 阿里云 漏洞
  • 哪儿提供邢台做网站网站前置审批项 教育
  • 支付招聘网站套餐费用怎么做帐mip wordpress 评论
  • wordpress恢复数据库菜单不见了从seo角度谈网站建设
  • 网站怎么设置二级域名宁波江北区建设局网站
  • 如何推广网站业务wordpress 登陆后访问
  • 三网合一网站建设程序定西市小企业网站建设建设
  • 梅州建站怎么做模板建网站费用
  • 购物平台网站建设流程商务厅网站建设意见
  • 重庆网站建设哪家公司哪家好郑州网站建设金麦建站
  • 电子商务网站进度的基本流程自己做网站 需要哪些东西
  • 青岛网站建设找湖北强涛建设工程有限公司网站
  • 网站建设要求世界500强中国企业名单
  • 科技网站排名企业官方网站怎么查
  • 美乐乐网站首页如何修改微型营销网站制作
  • 建设网站需求分析网站生成
  • 网站制作 牛商网 岳阳 公司网络有限公司经营范围
  • 网站开发感想wordpress有留言时邮件提醒
  • 网站开发老板排名哪里有手机网站制作公司
  • 视频直播网站app开发大理州城乡建设局网站
  • 优购物官方网站 商城陕西做网站的公司电话
  • 如何做自己的个人网站wordpress动静分离oss
  • 建设网站导航网站标题前的小图标怎么做
  • 企业网站建设之后wordpress esu
  • 网站流量统计查询计算机网络基础课程
  • 网站需求方案可口可乐网络营销案例
  • 购买网站域名 空间气球网站建设
  • 武威建设银行网站新乡做新网站
  • cms做网站不用后端wordpress 文章 调用