线程的创建
Java 使用 Thread 类代表线程,所有的线程对象都必须是 Thread 类或其子类的实例。Java 可以用三种方式来创建线程,如下所示:
- 继承 Thread 类创建线程
一般步骤如下:
- 定义 Thread 类的子类,并重写该类的 run() 方法,该方法的方法体就是线程需要完成的任务,run() 方法也称为线程执行体
- 创建 Thread 子类的实例,也就是创建了线程对象
- 启动线程,即调用线程的 start() 方法
- 实现 Runnable 接口创建线程
一般步骤如下:
- 定义 Runnable 接口的实现类,一样要重写 run() 方法,这个 run() 方法和Thread 中的 run() 方法一样是线程的执行体
- 创建 Runnable 实现类的实例,并用这个实例作为 Thread 的 target 来创建Thread 对象,这个 Thread 对象才是真正的线程对象
- 第三步依然是通过调用线程对象的 start() 方法来启动线程
- 使用 Callable 和 Future 创建线程
线程的终止
- Thread.stop() 不推荐使用,它会释放所有的 monitor
- 判断线程是否为中断状态,从而跳出循环体,实现线程的终止
Thread.interrupt() 中断线程
Thread.isInterrupt() 判断是否被中断
Thread.interrupted() 判断是否被中断,并清除当前中断状态
守护线程
- 后台默默完成一些系统性的服务,比如垃圾回收就是守护线程
- 当一个 Java 应用内,只有守护线程时,Java 虚拟机就会自动退出
- 在 start() 方法前,进行设置 setDaemon(True)
线程优先级
- 通过属性设置线程的优先级
- 高的优先级,有更大的机会抢占到资源
线程间的同步
- synchronized
- 指定加锁对象
- 直接作用于实例方法
- 直接作用于静态方法
多线程
参考资料:Java 中的多线程你只要看这一篇就够了
Java 守护线程
参考资料:Java 守护线程概述