前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多线程原理【java并发编程】

多线程原理【java并发编程】

作者头像
高大北
发布2022-06-14 20:43:56
2140
发布2022-06-14 20:43:56
举报
文章被收录于专栏:java架构计划训练营

线程池的创建方式:

可以使用jdk原生Executors创建,可缓存,可定时,指定大小,以及单例。

代码语言:javascript
复制
   public static void main(String[] args) {
       //可缓存
       ExecutorService executorService = Executors.newCachedThreadPool();
       executorService.execute(new Runnable() {
           @Override
           public void run() {
           }
       });
       //指定大小-可定长度
       ExecutorService executorService1 = Executors.newFixedThreadPool(10);
       executorService1.execute(new Runnable() {
           @Override
           public void run() {

           }
       });
       //单例
       ExecutorService executorService2 = Executors.newSingleThreadExecutor();
       //可定时
       ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(109);
   }

手写线程池

代码语言:javascript
复制
/**
 * 创建一个固定的线程-一直在运行
 */
public class MyExecutors {
    private List<WorkThread> workThreadList;
    private  LinkedBlockingDeque linkedBlockingDeque;
    private boolean isRunning = true;

    /**
     *
     * @param maxThreadCount 最多多个线程
     * @param deque  做多缓存多少
     */
    public MyExecutors(int maxThreadCount,int deque){
        linkedBlockingDeque=new LinkedBlockingDeque(deque);
        workThreadList=new ArrayList<WorkThread>();

        for (int i = 0; i < maxThreadCount; i++) {
        new WorkThread().start();
        }

    }
    public boolean execute(Runnable command){
        boolean offer = linkedBlockingDeque.offer(command);
        return offer;
    }
    class WorkThread extends Thread {
        @Override
        public void run() {
            while (isRunning|| linkedBlockingDeque.size()>0) {
                Runnable poll = (Runnable) linkedBlockingDeque.poll();
                if (poll != null) {
                    poll.run();
                }
            }
        }
    }
}

ThreadPoolExecutor核心参数

jdk自带的线程池都是基于ThreadPoolExecutor

核心线程数----正在运行的线程

最大线程数

x销毁时间(超过核心线程数 多久销毁)

最大线程数-核心线程数【最多同时运行的线程数】

线程池创建的线程式一直都会运行么

不会。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程池的创建方式:
    • 手写线程池
    • ThreadPoolExecutor核心参数
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档