关键词搜索

源码搜索 ×
×

线程池,线程池常见的几种用法

发布2018-11-19浏览795次

详情内容

线程池

线程池解决的问题:频繁的创建线程对象和多个线程之间进行上下文切换,是非常耗费时间和资源的,所以jdk1.5中提出了线程池技术同时能够更方便的管理线程

  1. 创建固定数量的线程
ExecutorService pool = Executors.newFixedThreadPool(2);
Runnable task = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }
    }
};
pool.execute(task);
pool.execute(task);
pool.execute(task);//线程池的带下只有两个   现在这个任务在其等待队列中排队等候
    1. 创建可变大小的线程池
    ExecutorService pool = Executors.newCachedThreadPool();
    Runnable task = new Runnable() {
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName());
            }
        }
    };
    pool.execute(task);
    pool.execute(task);
    pool.execute(task);
    
      1. 创建独立任务的线程池
      ExecutorService pool = Executors.newSingleThreadExecutor();
      Runnable task = new Runnable() {
          @Override
          public void run() {
              while (true) {
                  try {
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  System.out.println(Thread.currentThread().getName());
              }
          }
      };
      pool.execute(task);
      pool.execute(task);
      pool.execute(task);
      
        1. 创建可调度的线程池
        ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(2);
        Runnable task = new Runnable() {
        @Override
        public void run() {
        while (true) {
        try {
        Thread.sleep(1000);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName());
        }
        }
        };
        threadPool.schedule(task, 2000, TimeUnit.MILLISECONDS);
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15

        相关技术文章

        点击QQ咨询
        开通会员
        返回顶部
        ×
        微信扫码支付
        微信扫码支付
        确定支付下载
        请使用微信描二维码支付
        ×

        提示信息

        ×

        选择支付方式

        • 微信支付
        • 支付宝付款
        确定支付下载