一、进程
每一个程序都是一个独立进程在运行,分配一定的空间,进程之间相互独立。
二、线程
每个进程都有一个主线程,当有其他耗时或多任务操作时,可启动一个或多个线程。
三、多线程
线程池
1、ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
- corePoolSize:核心线程数。
- maximumPoolSize:线程池的最大线程数。这个数字是包含CorePoolSize的。
- keepAliveTime和unit:是idle线程最大存活时间。unit是单位。如果当前线程数>corePoolSize,则会kill一些线程至corePoolSize大小。
- workQueue:阻塞队列
- 下面两个参数是可选项:即Java重载了ThreadPoolExecutor的构造方法,下面两个参数可以不传,也可以只传一个。
- threadFactory:线程工厂。创建线程的接口,该接口只有一个方法:Thread newThread(Runnable r);我们可以实现这个接口进而自定义创建线程,比如制定线程名称,线程组等。
- handler:当线程池已满时,再提交任务会触发调用这个回调函数。
2、实例
3、线程安全