1 什么是线程
理解线程前先来看一下进程:其就是一个应用程序,当其启动运行时,操作系统就会为其分配一定的内存空间使其正常运行。
而线程则就是寄生在进程上,是“轻量级”的进程,一个进程可以有很多线程,每个线程执行各自不同的任务。
2 显示线程
先来看看如何直接手写一个显示线程:
new Thread(){ @Override public void run(){ try { //try里面是需要执行的方法 } catch (Exception e) { } } }.start(); |
这样就创建了一个可以使用的显示线程,值得注意的是不要忘记了@Override的注解。
3 线程池
首先可以知道,创建销毁线程会消耗使用内存,所以可以创建一个线程池供以使用,其好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题,如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题。
下面就是自己创建一个线程池对其参数的要求限制:
//线程池维护线程的最少数量 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,创建一个定时调度线程池,内置一个延迟队列,可按照设定的固定时间周期性的执行任务。
本文仅是对线程部分内容进行浅述,其内容仍需进一步学习,如有疑问错误,望指正。