Java教程

Java线程池

本文主要是介绍Java线程池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

多线程

程序:为了完成某项特定的任务,使用某种语言。编写一组指令的集合
进程:正在进行中的程序
线程:在一个进程中,执行一套功能流程,称为线程。
多线程:在一个进程中,执行多套功能流程,称为多线程。

为什么使用多线程?

抢占式策略系统:系统会为每个执行任务的线程分配一个很小的时间段,当该时间段用完后,系统会强制剥夺其CPU的执行权交给其他线程去完成任务。

  1. 特点:在一个特定的时间点只能有一个线程在线程流中执行任务。
  2. 单核(老版本电脑)在一个特定的时间点在只能一个线程执行,那么他的效率可能不如单线程执行因为多线程涉及到一个cpu切换
  3. 多线程可以提高效率,只不过提高效率的方式尽可能的利用你的cpu的资源。
  4. 可以增强用户体验
  • 小知识

*JVM是多线程:首先我们程序在执行的过程中就是一个线程,与此同时jvm底层还有个垃圾回收机制实时的检测你的垃圾对象一旦有垃圾,垃圾回收机制就释放内存空间,jvm并且运行多线程。
*main是主线程

  • 创建线程的方式一
  1. 声明一个类继承Thread类
  2. 重写Thread类的run方法,同时编写线程执行体
  3. 创建该子类的实例
  4. 通过start()启动线程,默认调用run方法
  • 线程的常用方法有哪些?

currentThread():获取当前执行线程
getName():获取线程名称

  • 创建线程的方式二
  1. 声明一个类实现Runnable接口
  2. 实现接口中的run()方法,同时编写线程执行体
  3. 创建该实现类的实例
  4. 创建Thread类的实例
  5. 将实现类的实例做完参数,传递给Thread的构造器
  6. 调用Thread的start()方法启动线程,默认调用run()方法
  • 创建两种线程的比较
  1. 实现Runnable 接口的方式解决了java中单继承的局限性 因为Runnable可以实现多个但是Thread 类只能继承一个
  2. 若多个线程需要访问共享数据时,首选使用Runnable的方式。

结束线程:采用循环通知的方式,通常在线程执行体中写一些持续执行的语句,比如循环,因此,控制住循环,就可以控制住当前线程。

  • 线程的控制
  1. sleep(long millis):是一个静态方法,使当前线程进入睡眠状态
  2. interrupt():中断阻塞状态的线程
  3. isAlive():判断当前线程是否处于存活状态
  4. join()/join(long millis):是一个实例方法,使当前线程进入阻塞状态,意思就是向主线程申请多长时间的执行权,当时间到了后,或者我执行完后,你可以怎么办都行。sleep是必须够时间才能继续向下执行,而join则是当我执行完后或者时间到期后你可以执行。
  5. yield():线程让步
  • 多线程的生命周期
  1. 创建状态:new Thread(r)
  2. start()方法去启动线程,然后进入
  3. 就绪状态:系统的多线程,线程的执行取决于抢占式策略系统,因为只有系统给分配了cpu的执行权才能执行
  4. 当获取cpu资源,线程才能进入运行状态 (运行可能会回到就绪状态,因为是抢占式策略,可能执行到一半失去cpu资源)
  5. 就绪、运行可能会进入到阻塞状态(sleep时间到 join方法)
  6. 线程执行完成后,就到了结束状态(stop、Exception、Error也能进入到结束状态)

注意点:
当执行线程结束后,守护线程也就结束了

  • 线程的优先级
    • 线程优先级(1-10)默认的优先级为5,优先级高不意味着线程一定会优先执行,优先级高可以更高概率获取优先级资源
  1. setPriority()设置线程优先级
  2. getPriority()获取线程优先级
这篇关于Java线程池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!