博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 中的线程池和线程 调用小demo
阅读量:4686 次
发布时间:2019-06-09

本文共 2119 字,大约阅读时间需要 7 分钟。

public class Main {    public static void main(String[] args) {        try {     ///   ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,                new ArrayBlockingQueue
(5));//创建线程池 var executores = Executors.newCachedThreadPool();//创建线程池 ThreadDemo temp=new ThreadDemo("Hello");创建线程 executores.execute(temp);//将线程放入到线程池里面 System.out.println("Hello World!"); } catch (Exception e) { } }}class ThreadDemo extends Thread { private String threadName; ThreadDemo( String name) { threadName = name; System.out.println("Creating " + threadName ); } public void run() { System.out.println("Running " + threadName ); try { for(int i = 4; i > 0; i--) { System.out.println("Thread: " + threadName + ", " + i); // 让线程睡眠一会 Thread.sleep(50); } }catch (InterruptedException e) { System.out.println("Thread " + threadName + " interrupted."); } System.out.println("Thread " + threadName + " exiting."); }}

其中

在java doc中,并不提倡我们直接使用ThreadPoolExecutor,而是使用Executors类中提供的几个静态方法来创建线程池:

 
 
 
Executors.newCachedThreadPool();        
//创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE
Executors.newSingleThreadExecutor();   
//创建容量为1的缓冲池
Executors.newFixedThreadPool(
int
);    
//创建固定容量大小的缓冲池
  • setCorePoolSize:设置核心池大小(我理解的就是可以同时运行的最大线程数量,超过这个数量会等待该线程池内其他线程完成释放后执行)
  • setMaximumPoolSize:设置线程池最大能创建的线程数目大小

    当线程池的任务缓存队列已满并且线程池中的线程数目达到MaximumPoolSize,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:

     
     
     
     
    ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
    ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
    ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

 

线程池的关闭

  ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown()和shutdownNow(),其中:

  • shutdown():不会立即终止线程池,而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务
  • shutdownNow():立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务

参考资料:https://www.cnblogs.com/dolphin0520/p/3932921.html

转载于:https://www.cnblogs.com/fishyues/p/9578107.html

你可能感兴趣的文章
httpclient4.5.2 Post请求支持http和https
查看>>
HDU之旅
查看>>
Sql2005:provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接
查看>>
SQL Server主键自动生成_表and存储过程
查看>>
selenium无法正常运行 Chrome浏览器,cannot find Chrome binary的问题
查看>>
一体机分区误删找到数据的方案
查看>>
excel常用函数
查看>>
网络协议-restful协议
查看>>
JavaScript模块化编程(一)
查看>>
egg文件制作与安装
查看>>
后台测试流程与经验分享
查看>>
EventBus 最简易的使用方式
查看>>
jQuery与Dom
查看>>
统治世界的十大算法
查看>>
Microsoft Office word powerpoint 中删除MathType加载项后每次启动显示加载错误
查看>>
剑指offer54 表示数值的字符串
查看>>
h5py
查看>>
网络的四层架构与网站的数据库的用户信息表的设计
查看>>
响应在此上下文中不可用
查看>>
Mysql入门-基本操作(一)
查看>>