线程

————————————1.线程池的重要参数————————————

1.corePoolSize(核心线程数)

--核心线程会一直执行,即使没有任务执行

--当线程数小于核心线程数,有新任务执行时线程池会优先创建新线程(即使有空闲线程也不用)

--设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭

2.BlockingQueue:阻塞队列,存储等待执行的任务。参数有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue可选。

--当核心线程数达到最大时,新的任务会放入等待队列中排队执行

3.maxPoolSize(最大线程数)

--当前线程数>=核心线程数且任务队列已满,就会创建新的线程

--当前线程数=最大线程数,且任务队列已满,线程池会拒绝处理任务抛出异常

4.keepAliveTime(线程空闲时间)

5.TimeUnit:空闲线程的保留时间单位。

--当线程空闲时间=keepAliveTime时,线程会关闭 知道=核心线程数时停止

--allowCoreThreadTimeout=true时,核心线程也会关闭

6.ThreadFactory线程工厂,用来创建线程

7.rejectedExecutionHandler(任务拒绝处理器)

当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务

RejectedExecutionHandler:队列已满,而且任务量大于最大线程的异常处理策略

——————————————线程池的种类————————————————

1.newCachedThreadPool(创建一个可缓存线程池程

适用:执行很多短期异步的小程序或者负载较轻的服务器)

2.newFixedThreadPool(创建一个定长线程池,执行长期的任务,性能好很多)

3.newSingleThreadExecutor(创建一个定长线程池,一个任务一个任务执行的场景)

4.NewScheduledThreadPool(创建一个单线程化的线程池,周期性执行任务的场景)

————————进程和线程的区别————————

进程是资源(CPU,内存)分配的基本单位,他是程序执行的一个实例。

程序运行时系统会创建一个进程,为它分配资源,将它放入就绪队列,等待进程调度器调度,当选中它时为它分配CPU资源,程序开始正真的运行。

线程是程序执行的最小单位,它是进程的一个执行流,一个进程可以有多个线程组成,线程间共享进程的所有资源,每个线程都有自己的局部变量和堆栈,它们被CPU独立调度执行,支持多并发,每个请求分配一个线程执行。

区别:

1.进程是资源分配的最小单位,线程是程序执行的最小单位

2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据段来维护代码段,堆栈段和数据段,这种操作是非常昂贵的。所以进程间切换是非常耗资源的。

线程是共享进程中的数据,使用相同的地址空间

3.线程之间的通信方便,同一进程下的线程共享静态资源和全局变量等数据

进程间的通信需要通过(IPC)来实现

4.多进程程序更健壮,多线程程序一个线程死掉,整个进程就会死掉,多进程一个进程死掉不会影响其他的进程,因为进程都有自己的独立空间

——————————2.线程同步的方式有哪些——————————

临界区,信号量,互斥对象,事件对象

——————————3.进程的调度算法——————————————

1.先来先服务调度算法

2.短作业进程优先调度算法

3.优先权调度算法

4.高响应比优先调度算法

你可能感兴趣的:(线程)