Runnable任务
public class MyRunnable implements Runnable{
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see Thread#run()
*/
@Override
public void run() {
try{
System.out.println(Thread.currentThread().getName()+"runnable任务执行");
Thread.sleep(2000);
}catch (Exception e){
e.printStackTrace();
}
}
}
线程池
import java.util.concurrent.*;
public class ThreadpoolTest1 {
public static void main(String[] args) {
/** public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)*/
//创建线程池对象
ExecutorService pool = new ThreadPoolExecutor(3,
5,
8,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(4),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());//线程池满了的拒绝策略
//线程池处理Runnable任务
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.shutdown(); //当所有线程都被处理完 关闭
//pool.shutdownNow(); //立即关闭 返回未处理的线程
}
}
结果