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

西安创意网站建设广西做网站找谁

西安创意网站建设,广西做网站找谁,电商网站开发环境怎么写,做小程序要多少钱文章目录 一、ThreadPool线程池状态二、ThreadPoolExecutor构造方法三、Executors3.1 固定大小线程池3.2 带缓冲线程池3.3 单线程线程池 四、ThreadPoolExecutor4.1 execute(Runnable task)方法使用4.2 submit()方法4.3 invokeAll()4.4 invokeAny()4.5 shutdown()4.6 shutdownN…

文章目录

  • 一、ThreadPool线程池状态
  • 二、ThreadPoolExecutor构造方法
  • 三、Executors
    • 3.1 固定大小线程池
    • 3.2 带缓冲线程池
    • 3.3 单线程线程池
  • 四、ThreadPoolExecutor
    • 4.1 execute(Runnable task)方法使用
    • 4.2 submit()方法
    • 4.3 invokeAll()
    • 4.4 invokeAny()
    • 4.5 shutdown()
    • 4.6 shutdownNow()
  • 总结


一、ThreadPool线程池状态

在这里插入图片描述
ThreadPoolExecutor使用int高3位来表示线程池状态,低29位表示线程数量

在这里插入图片描述
从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING最高的1位是1是代表的是负数
这些信息存储在一个原子变量ctl中,目的是将线程池状态与线程个数合二为一,这样就可以用一次CAS原子操作进行赋值

c为旧值,ctlOf返回结果为新值

ctl.compareAndSet(c, ctlOf(targetState, workerCountOf(c))))

rs(running state)为高3位代表线程池状态 wc(worker count) 为低29位代表线程个数

private static int ctlOf(int rs,int wc){return rs | wc;}

二、ThreadPoolExecutor构造方法

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

ThreadPoolExecutor7大核心参数
corePoolSize:核心线程数目(最多保留的线程数)
maximumPoolSize:最大线程数目
keepAliveTime:生存时间(针对非核心线程)
unit:时间单位(针对非核心线程)
workQueue:阻塞队列
threadFactory:线程工厂
handler:拒接策略
非核心线程数=maximumPoolSize-corePoolSize

拒绝策略

  1. AbortPolicy:让调用者抛出RejectedException异常(默认拒绝策略)
  2. CallerRunsPolicy:让调用者运行任务
  3. DiscardPolicy:放弃本次任务
  4. DiscardOldestPolicy:放弃队列中最早的任务,本任务会取而代之

三、Executors

3.1 固定大小线程池

public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());}

特点

  1. 核心线程数=最大线程数,因此不需要超时时间
  2. 阻塞队列是无界的,可以放任意数量的任务

3.2 带缓冲线程池

public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());}

特点
1. 核心线程=0,最大线程数=Integer的最大值,非核心线程空闲的生存时间是60S
2. 全员都是非核心线程
3. 非核心线程可以无线创建
4. SynchronousQueue实现特点,它没有容量,没有线程来取是放不进去的(一手交钱,一手交货)

3.3 单线程线程池

public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));}

区别

  1. 自己创建一个单线程串行执行任务,如果执行任务失败而终止那么没有任何补救措施,而线程池还会重新创建一个线程,保证线程池的工作

四、ThreadPoolExecutor

4.1 execute(Runnable task)方法使用

特点:execute(Runnable task)方法执行后不会返回结果,若我们执行完方法后需要结果进行运算则不适用

public static void main(String[] args) throws Exception{ExecutorService pool = Executors.newFixedThreadPool(1);//方式一pool.execute(new Runnable() {@Overridepublic void run() {//执行的业务逻辑}});//方式二:使用lambda表达式简化pool.execute(() -> {//执行的业务逻辑});}

4.2 submit()方法

特点:我们执行完submit方法后可以将处理结果进行返回

public static void main(String[] args) throws Exception{ExecutorService pool = Executors.newFixedThreadPool(1);//方式一Future<返回结果类型> taskResult=pool.submit(new Callable<返回结果类型>() {@Overridepublic 返回结果类型 call() {//执行的业务逻辑,后将处理结果返回return null;}});//拿到返回的结果taskResult.get();//方式二:使用lambda表达式简化Future<返回结果类型> taskResult=pool.submit(() -> {//执行的业务逻辑return null;});//拿到返回的结果taskResult.get();}

4.3 invokeAll()

特点:执行任务以集合的方式,并且返回结果集合

public static void main(String[] args) throws Exception{ExecutorService pool = Executors.newFixedThreadPool(1);List<Future<Object>> tasks = pool.invokeAll(Arrays.asList(() -> {//执行逻辑返回结果return 1;},() -> {//执行逻辑返回结果return 2;}));for (Future<Object> task : tasks) {System.out.println(task.get());}}

4.4 invokeAny()

特点:将任务集合中所有的任务进行执行,只返回第一个执行完毕的任务结果

Integer res = pool.invokeAny(Arrays.asList(() -> {return 1;},() -> {return 2;}));System.out.println(res);

4.5 shutdown()

特点

  1. 将线程池状态变为SHUTDOWN
  • 不会接受新任务
  • 但已提交的任务会执行完
  • 此方法不会阻塞调用线程的执行

4.6 shutdownNow()

特点

  1. 线程池状态变为STOP
  • 不会接收新任务
  • 会将队列中的任务返回
  • 并用interrupt的方式终端正在执行的任务

总结

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

相关文章:

  • 建站宝盒自助建站系统怎么做科技小制作视频网站
  • 做网站底部不显示中文怎么回事做词云的在线网站
  • 用织梦做模板网站获取网页 代码 做网站
  • 做一个简单网站用笔记本做网站
  • 网站有死链接怎么办国家企业官网
  • 许昌做网站团队沈阳企业制作网站
  • 咋建网站做交通分析的网站
  • 去年做哪个网站致富甘肃项目信息网
  • 站长友情链接wordpress支持手机吗
  • 受欢迎的聊城网站建设软件开发工具都有哪些
  • 福建搜索引擎优化网站的优化用什么软件
  • 建网站的费用是多少建设工程机械职业技能鉴定
  • 太原网站建设与维护口碑营销的案例
  • 买服务器做网站主机诚信网站体系建设工作
  • 建站宝盒设置大城县建设局网站
  • 建设网站是什么模式东莞易赢
  • 兰州网站建设实验总结钓鱼网站图片
  • 深圳建网站服务wordpress路由映射
  • 公司网站的后台wordpress 去掉tag
  • 网站备案 服务内容wordpress怎么恢复自带主题
  • 重庆城乡建设部网站首页招代理的网站要怎么做的
  • 新增网站和新增接入牛商网怎么样
  • 自己建网站有什么好处如何选择网站开发
  • 一个空间怎么做两个网站建设银行论坛网站
  • 花生壳做网站网页游戏排行榜前
  • 网站建设山东聚搜网络网站建设需求文档模版
  • 征婚网站 女 做茶叶生意佛山网签查询系统
  • 苏州网站建设专业的公司网站架构图的制作
  • 网站建设营销公司外贸网站模板外贸网站建设
  • 甘肃建投土木工程建设有限公司网站施工企业会计科目表