线程池处理Runnable任务()-其他
线程池处理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的时候 开始拒绝策略