线程池处理Runnable任务()

线程池如何处理Runnable任务

使用ExecutorService的方法:void execute(Runnable target)

package com.itheima.d8_threadpool;

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "输出了:HelloWorld ==> "  + i);
        }
        try {
            System.out.println(Thread.currentThread().getName() + "本任务与线程绑定了,线程进入休眠了~~~");
            Thread.sleep(10000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.itheima.d8_threadpool;

import java.util.concurrent.*;

/**
    目标:自定义一个线程池对象,并测试其特性。
 */
public class ThreadPoolDemo1 {
    public static void main(String[] args) {
        // 1、创建线程池对象
        /**
         public ThreadPoolExecutor(int corePoolSize,
                                 int maximumPoolSize,
                                 long keepAliveTime,
                                 TimeUnit unit,
                                 BlockingQueue<Runnable> workQueue,
                                 ThreadFactory threadFactory,
                                 RejectedExecutionHandler handler)
         */
        ExecutorService pool = new ThreadPoolExecutor(
                3,
                5 ,
                6,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(5) ,
                Executors.defaultThreadFactory(),
               new ThreadPoolExecutor.AbortPolicy()
        );

        // 2、给任务线程池处理。
        Runnable target = new MyRunnable();
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        // 创建临时线程
        pool.execute(target);
        pool.execute(target);
//        // 不创建,拒绝策略被触发!!!
//        pool.execute(target);

        // 关闭线程池(开发中一般不会使用)。
        // pool.shutdownNow(); // 立即关闭,即使任务没有完成,会丢失任务的!
        pool.shutdown(); // 会等待全部任务执行完毕之后再关闭(建议使用的)
    }
}

 一共最大5个线程   当有3个线程 pool.execute(target); 执行的业务代码的时候。线程数量是3

 此时再添加5个线程 pool.execute(target); 执行的业务代码的时候 因为还没有达到最大队列数5 所以此时线程数量仍然是3

 此时再添加1个线程 开始 创建临时线程。 因为临时线程数量最大为2 

 当临时线程超过2的时候 开始拒绝策略

————————

线程池如何处理Runnable任务

使用ExecutorService的方法:void execute(Runnable target)

package com.itheima.d8_threadpool;

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "输出了:HelloWorld ==> "  + i);
        }
        try {
            System.out.println(Thread.currentThread().getName() + "本任务与线程绑定了,线程进入休眠了~~~");
            Thread.sleep(10000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.itheima.d8_threadpool;

import java.util.concurrent.*;

/**
    目标:自定义一个线程池对象,并测试其特性。
 */
public class ThreadPoolDemo1 {
    public static void main(String[] args) {
        // 1、创建线程池对象
        /**
         public ThreadPoolExecutor(int corePoolSize,
                                 int maximumPoolSize,
                                 long keepAliveTime,
                                 TimeUnit unit,
                                 BlockingQueue<Runnable> workQueue,
                                 ThreadFactory threadFactory,
                                 RejectedExecutionHandler handler)
         */
        ExecutorService pool = new ThreadPoolExecutor(
                3,
                5 ,
                6,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(5) ,
                Executors.defaultThreadFactory(),
               new ThreadPoolExecutor.AbortPolicy()
        );

        // 2、给任务线程池处理。
        Runnable target = new MyRunnable();
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);

        // 创建临时线程
        pool.execute(target);
        pool.execute(target);
//        // 不创建,拒绝策略被触发!!!
//        pool.execute(target);

        // 关闭线程池(开发中一般不会使用)。
        // pool.shutdownNow(); // 立即关闭,即使任务没有完成,会丢失任务的!
        pool.shutdown(); // 会等待全部任务执行完毕之后再关闭(建议使用的)
    }
}

 一共最大5个线程   当有3个线程 pool.execute(target); 执行的业务代码的时候。线程数量是3

 此时再添加5个线程 pool.execute(target); 执行的业务代码的时候 因为还没有达到最大队列数5 所以此时线程数量仍然是3

 此时再添加1个线程 开始 创建临时线程。 因为临时线程数量最大为2 

 当临时线程超过2的时候 开始拒绝策略