文章目录
- 线程和线程池的区别
- 线程池的七大参数
线程和线程池的区别
线程的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