zoukankan      html  css  js  c++  java
  • java 中的线程池和线程 调用小demo

    public class Main {
    
        public static void main(String[] args) {
            try {
         ///   ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
                    new ArrayBlockingQueue<Runnable>(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

  • 相关阅读:
    mybatis的缓存机制
    mybatis动态SQL
    mybatis关联集合List&分布查询传递多列值
    winrt获取文件MD5码
    在wpf中使用winrt的Toast弹框效果
    winrt控件
    WdatePicker组件不显示
    Thread.Sleep in WinRT
    google 语音api
    UTF8编码转换(C#)
  • 原文地址:https://www.cnblogs.com/fishyues/p/9578107.html
Copyright © 2011-2022 走看看