操作系统|显示线程和线程池浅析

2020-05-18 17:46:06 浏览数 (1)

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 团队


0 人点赞