/*
* 线程池:一堆线程装在某个容器里,等着来运行
* 一个线程池维护着很多线程,也维护着一个待执行任务队列,还维护着一个结束的任务队列
*
*
* ExecutorService:一个接口,可以往这里面扔任务,Java的线程池都实现了ExecutorService接口
* --executor方法执行Runnable任务,不需要返回值
* --submit方法可以执行那些有返回值的,也可以执行没有返回值的
*
* Executors:有一些工厂方法,产生线程池
* newFixedThreadPool:创建个数为5的线程池,是一个固定个数的线程池,有五个线程,返回ExecutorService
*/
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPool_value {
public static void main(String[] args) throws InterruptedException {
/*
* 线程池:一堆线程装在某个容器里,等着来运行
*一个线程池维护着很多线程,也维护着一个待执行任务队列,还维护着一个结束的任务队列
*
* ExecutorService:
* 一个接口,可以往这里面扔任务,Java的线程池都实现了ExecutorService接口
* --executor方法执行Runnable任务,不需要返回值
* --submit方法可以执行那些有返回值的,也可以执行没有返回值的
*
* Executors:有一些工厂方法,产生线程池
* newFixedThreadPool:创建个数为5的线程池,是一个固定个数的线程池,有五个线程,返回ExecutorService
*/
ExecutorService service=Executors.newFixedThreadPool(5);
/*
* 往线程池扔6个任务,但只有5个线程,即有一个线程要处理掉两个任务
*/
for(int i=0;i<6;i++){
service.execute(new Runnable() { //execute执行任务,自动调用run方法
public void run() {
try {
TimeUnit.MILLISECONDS.sleep(500); //睡500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
});
}
System.out.println(service);
service.shutdown(); //关闭线程池,正常关闭,等着所有的任务执行完才关闭
//service.shutdownNow(); 直接关闭,不管任务是否处理完
/*
*一些方法可以探测是否关闭
*/
//false.代表所有的任务是否都执行完了,因为睡500毫秒,显然没有执行完
System.out.println(service.isTerminated());
//是不是关闭了,是的关闭了,但是不代表任务执行完了
System.out.println(service.isShutdown());
System.out.println(service); //任务没有执行完,状态是正在关闭中
TimeUnit.SECONDS.sleep(5); //主线程睡了5秒钟,线程池中的线程已经处理完任务
System.out.println(service.isTerminated()); //true
System.out.println(service.isShutdown()); //true
System.out.println(service);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)