开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:线程池】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/524
线程池
内容介绍
一、什么叫做线程池
二、线程的执行操作
一、什么叫做线程池
实际上在项目的开发里面对于线程池应用最多的地方就在于数据库的连接池上,如果要想实现线程池,需要使用一个专门的类完成( java.util.concurrent 包): public interface ExecutorService extends Executor。
二、线程的执行操作
public void execute(Runnable command);
线程执行操作意味着有一个线程对象,则可以通过它进行线程的自动执行。
如果要想取得 ExecutorService 子接口对象,则必须利用java.util.concurrent.Executors
·创建一个无限大小的线程 public static ExecutorService newCachedThreadPool();
·创建有限大小的线程池: public static ExecutorService newFixedThreadPool(int nThreads)。
范例:创建一个有限大小的线程池
package cn.mldn.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestIODemo {
public static void main(String[ ] args) throws Exception {
ExecutorService service = Executors .newCachedThreadPooL() ; //
创建一个无限大小线程池
//
此时ExecutorService指的是一个可缓存的线程池,但是没有设置缓存大小;
//
如果此时的内容过多,那么可灵活回收空闲的线程,若不回收,则创建新的线程;
for (int x = 0 ; x < 10 ; x ++) {
int myNum = x ;
service.execute( new Runnable() {
@Override
public void run() {
system.out.println(Thread.currentThread().getName() + ",x = " + myNum);
}});
}
}
}
范例:创建3个大小的线程池
package cn.mldn.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestIODemo {
public static void main(String[ ] args) throws Exception {
ExecutorService service = Executors.newFixedThreadPool(3) ;
//
此时ExecutorService指的是一个可缓存的线程池,但是没有设置缓存大小;
//
如果此时的内容过多,那么可灵活回收空闲的线程,若不回收,则创建新的线程;
for (int x = 0 ; x < 10 ; x ++) {
int myNum = x ;
service.execute( new Runnable() {
@Override
public void run() {
system.out.println(Thread.currentThread().getName() + ",x = " + myNum);
}});
}
}
}
此时由于线程池的空间只能够存放有三个线程的对象,所以这个时候对于不能够保存的线程,将会在队列之中进行等待。
如果不确定到底能放多少个线程池,可直接通过如下操作,能够取得系统可用进程的数量。
System.out.println(Runtime.getRuntime( ).availableProcessors());