首页 > 其他分享 >线程池处理Runnable任务

线程池处理Runnable任务

时间:2022-11-30 12:23:41浏览次数:37  
标签:execute Runnable target 任务 线程 public pool

线程池如何处理Runnable任务

使用ExecutorService的方法:
void execute(Runnable target)

package com.itheima.d8_threadpool;

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "输出了:HelloWorld ==> "  + i);
        }
        try {
            System.out.println(Thread.currentThread().getName() + "本任务与线程绑定了,线程进入休眠了~~~");
            Thread.sleep(10000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

package com.itheima.d8_threadpool;

import java.util.concurrent.*;

/**
    目标:自定义一个线程池对象,并测试其特性。
 */
public class ThreadPoolDemo1 {
    public static void main(String[] args) {
        // 1、创建线程池对象
        /**
         public ThreadPoolExecutor(int corePoolSize,
                                 int maximumPoolSize,
                                 long keepAliveTime,
                                 TimeUnit unit,
                                 BlockingQueue<Runnable> workQueue,
                                 ThreadFactory threadFactory,
                                 RejectedExecutionHandler handler)
         */
        ExecutorService pool = new ThreadPoolExecutor(
                3,
                5 ,
                6,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(5) ,
                Executors.defaultThreadFactory(),
               new ThreadPoolExecutor.AbortPolicy()
        );

        // 2、给任务线程池处理。
        Runnable target = new MyRunnable();
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        // 创建临时线程
        pool.execute(target);
        pool.execute(target);
//        // 不创建,拒绝策略被触发!!!
//        pool.execute(target);

        // 关闭线程池(开发中一般不会使用)。
        // pool.shutdownNow(); // 立即关闭,即使任务没有完成,会丢失任务的!
        pool.shutdown(); // 会等待全部任务执行完毕之后再关闭(建议使用的)
    }
}

 一共最大5个线程   当有3个线程 pool.execute(target); 执行的业务代码的时候。线程数量是3

 此时再添加5个线程 pool.execute(target); 执行的业务代码的时候 因为还没有达到最大队列数5 所以此时线程数量仍然是3

 此时再添加1个线程 开始 创建临时线程。 因为临时线程数量最大为2 

 当临时线程超过2的时候 开始拒绝策略

 

标签:execute,Runnable,target,任务,线程,public,pool
From: https://www.cnblogs.com/popopopopo/p/16938044.html

相关文章

  • 如何通过链路追踪进行定时任务诊断
    作者:千习背景简介什么是定时任务定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务......
  • 如何通过链路追踪进行定时任务诊断
    作者:千习背景简介什么是定时任务定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务技术......
  • Qt网络编程-从0到多线程编程
    网络编程开发1.简介两个协议,一个是TCP协议,一个是UDP协议先说TCP:TCP的话,服务器端需要端口监听,直到有客户端进行连接发送过来请求数据,然后客户端根据请求数据进行应答,之......
  • Qt多线程开发总览,既然用到了就记录一下
    多线程在LBD_VM_Intercom中使用的一个简单的实例陶工给的dll需要进行异步操作才可以将视频画面附到窗体上,必须得在画面出现之后才可以附加画面,否则就有可能出现意外bug,所......
  • Qt自带的阴影类、跨线程问题汇总、hover相关、全屏轮子,一些思考。
    一点思考:故事的结局重不重要?我语文不好,但是我数学不好。我数学不好,但是我英语不好。我英语不好,但是我物理不好。我物理不好,但是我化学不好。我化学不好,但是我历史不好......
  • 线程池
    线程池什么是线程池?线程池就是一个可以复用线程的技术。不使用线程池的问题如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线......
  • Linux如何查看定时任务
    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。Linux查看定......
  • Python爬取m3u8视频(多线程)- OK好用,代码在文章尾
    摘自:https://www.cnblogs.com/python147/p/14511627.html1.前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。......
  • 网上一个哥们写的,使用Python写一个m3u8多线程下载器 -- 没用起来
    摘自:https://blog.csdn.net/muslim377287976/article/details/104340242/ 文章目录I.挖坑缘由II.功能/更新记录III.代码1.GUI2.下载工具类3.逻辑代码IV.下载地址I.挖坑......
  • sharp.js进行多任务处理时内存泄漏?
    造成原因默认大多数基于glibc的Linux上的默认libvps内存分配器不适合涉及大量内存分配和使用激增的长期运行进程。至于macOS,基于Musl的Linux,Alpine,Windows这些操作系统都......