文章目录

  • 线程和线程池的区别
  • 线程池的七大参数


线程和线程池的区别

线程的join方法:

目的是使子线程去等待主线程执行完成的,具体的应用场景是,当主线程要使用子线程的计算结果的时候,但是子线程的运算时间比较长,正常的情况下,主线程要先与子线程结束,这就得使用join方法来激活线程,而不是使用start来启动线程。

线程池的 性能高于线程,线程池实现了线程的重复使用,但是一般的线程没有实现线程的复用,是一直在执行线程的创建和销毁,中间会耗费大量的时间。


线程在空间上的耗费:

【1】Thread内核数据占用:主要有OSID(线程的ID)和Context(存放CPU寄存器相关的资源)寄存器的状态会被保存到Context中,以便下次使用。因为子线程程序和主线程程序执行主要是依赖时间片切换(所以电脑使用中不会有卡顿情况)。通常系统分配一个时间片大约30ms,意思就是1秒中被分配至少33份,分别执行不同的线程。

【2】Thread环境块(了解)

【3】用户堆栈模式(主要部分):用户程序中的局部变量和参数传递所使用的堆栈,如果是引用类型则使用堆的空间,如果是值类型则使用栈的空间。例如在写程序中会遇到【StackOverFlowException异常:内存溢出】。典型的就是程序有死循环!不断占用堆栈空间,因为默认情况下:windows会分配1M的空间给用户模式堆栈(换句话说,一个线程分配1M的堆栈空间,用于局部变量和参数传递)

线程在时间上的耗费:

【1】资源使用通知开销:一个程序开启通常会有很多资源调用,包括托管的,非托管的dll、exe、资源、元数据等。。。这些资源的启用都需要通知,通知是花时间的。

【2】时间片开销(主要部分):只要我们电脑的线程超过电脑的CPU处理器个数对应的线程,一定会有时间片切换。


线程池的七大参数

核心线程数 corePoolSize

非核心线程数 maximumPoolSize

时间 keepAliveTime

时间单位 TimeUnit

队列 BlockingQueue

线程工厂 ThreadFactory

拒绝策略 RejectedExecutionHandler