zoukankan      html  css  js  c++  java
  • Java 线程池

    public class ThreadPoolDemo {

    public static void main(String[] args) {
    /**
    * 总结: 池中线程数量固定,不会发生变化 使用无界的LinkedBlockingQueue,要综合考虑生成与消费能力,生成过剩,可能导致堆内存溢出。 适用一些很稳定很固定的正规并发线程,多用于服务器
    */
    ExecutorService fixed = Executors.newFixedThreadPool(4);
    /**
    * 总结 池中线程时随着处理数据增加而增加 线程数并不是一直增加,如果有新任务需要执行时,首先查询池中是否有空闲线程并且还为到空闲截止时间,如果有,则使用空闲线程,如果没有,则创建新线程并放入池中。 用于执行一些生存期很短的异步型任务。不适用于IO等长延时操作,因为这可能会创建大量线程,导致系统崩溃。
    * 使用SynchronousQueue作为阻塞队列,如果有新任务进入队列,必须队列中数据被其他线程处理,否则会等待。
    */
    ExecutorService cached = Executors.newCachedThreadPool();
    /**
    * 总结: 线程中只有一个线程在执行 适用于有明确执行顺序但是不影响主线程的任务,压入池中的任务会按照队列顺序执行。 使用无界的LinkedBlockingQueue,要综合考虑生成与消费能力,生成过剩,可能导致堆内存溢出。
    */
    ExecutorService single = Executors.newSingleThreadExecutor();
    /**
    * 创建一个定长线程池,支持定时及周期性任务执行。
    */
    ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(5);

    for (int i = 0; i < 50; i++) {
    fixed.submit(new ThreadRunner((i + 1)));
    cached.submit(new ThreadRunner((i + 1)));
    single.submit(new ThreadRunner((i + 1)));
    scheduled.schedule(new ThreadRunner((i + 1)), 3, TimeUnit.SECONDS);// 延迟3秒执行
    }

    scheduled.scheduleWithFixedDelay(new ThreadRunner((1)), 1, 3, TimeUnit.SECONDS);// 定期执行,3秒执行一次
    fixed.shutdown();
    cached.shutdown();
    single.shutdown();
    scheduled.shutdown();
    }

    }

    class ThreadRunner implements Runnable {

    private final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");

    private Integer num;

    public ThreadRunner(Integer num) {
    this.num = num;
    }

    @Override
    public void run() {
    System.out.println("thread:" + Thread.currentThread().getName() + ",time:" + format.format(new Date()) + ",num:" + num);

    }
    }

  • 相关阅读:
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    C语言基础知识【作用域规则】
  • 原文地址:https://www.cnblogs.com/RealWorld/p/9511636.html
Copyright © 2011-2022 走看看