java线程池

网上的线程池多数是教学很少有直接表达线程池怎么用的,有代码量也有点大,其实线程池几行代码就可以表达

public class Main {
    public static void main(String[] args) {
        ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
        Runnable task=()->{
          System.out.println("hello,world");
        };
        threadPoolExecutor.execute(task);
        threadPoolExecutor.shutdown();
    }
}

用这就这么简单

这个是参数
corePoolSize:指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到workQueue任务队列中去;
maximumPoolSize:指定了线程池中的最大线程数量,这个参数会根据你使用的workQueue任务队列的类型,决定线程池会开辟的最大线程数量;
keepAliveTime:当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁;
unit:keepAliveTime的单位
workQueue:任务队列,被添加到线程池中,但尚未被执行的任务;它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;
threadFactory:线程工厂,用于创建线程,一般用默认即可;
handler:拒绝策略;当任务太多来不及处理时,如何拒绝任务;

还可以用Executors创建线程也就是这4种线程池,其实就是把上面那种的参数给固定一下而已
Java通过Executors提供四种线程池,分别为:
1,newCachedThreadPoo
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2,newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3,newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。
4,newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

public class Main {
    public static void main(String[] args) {

        ExecutorService executorService= Executors.newSingleThreadExecutor();

        Runnable task=()->{
          System.out.println("hello,world");
        };
        executorService.execute(task);
        executorService.shutdown();
    }
}

发布了72 篇原创文章 · 获赞 276 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 点我我会动 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览