1 什么是线程
理解线程前先来看一下进程:其就是一个应用程序,当其启动运行时,操作系统就会为其分配一定的内存空间使其正常运行。
而线程则就是寄生在进程上,是“轻量级”的进程,一个进程可以有很多线程,每个线程执行各自不同的任务。
2 显示线程
先来看看如何直接手写一个显示线程:
代码语言:javascript复制
new Thread(){
@Override
public void run(){
try {
//try里面是需要执行的方法
} catch (Exception e) {
}
}
}.start();
这样就创建了一个可以使用的显示线程,值得注意的是不要忘记了@Override的注解。
3 线程池
首先可以知道,创建销毁线程会消耗使用内存,所以可以创建一个线程池供以使用,其好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题,如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题。
下面就是自己创建一个线程池对其参数的要求限制:
代码语言:javascript复制
//线程池维护线程的最少数量
private int corePoolSize = 2;
//线程池维护线程的最大数量
private int maximumPoolSize = 10;
//线程池维护线程所允许的空闲时间
private long keepAliveTime = 3;
//线程池维护线程所允许的空闲时间的单位
private TimeUnit unit = TimeUnit.SECONDS;
//线程池所使用的缓冲队列
private BlockingQueue<Runnable> workQueue;
//线程池对拒绝任务的处理策略
private RejectedExecutionHandler handler;
下面还有关于四种线程池的特点简介:
一:newCachedThreadPool,创建一个缓存线程池,当线程数过大,可回收多余线
程,如线程数不足,创建新线程。
二:newFixedThreadPool,创建一个固定数量大小的线程池,当线程任务数超过固定大小时,未执行的线程任务进行阻塞队列,等待线程池调度。
三:newSingleThreadExecutor,创建一个单例线程池, 只存在一个线程运行, 多的线程任务进行阻塞状态,线程任务按顺序执行。
四:newScheduledThreadPool,创建一个定时调度线程池,内置一个延迟队列,可按照设定的固定时间周期性的执行任务。
本文仅是对线程部分内容进行浅述,其内容仍需进一步学习,如有疑问错误,望指正。
END
主 编 | 张祯悦
责 编 | 黄晓锋
where2go 团队