文章插图
1.线程是什么?
进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程 。线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小 。同一时刻运行多个程序的能力 。每一个任务称为一个线程 。可以同时运行一个以上线程的程序称为多线程程序 。
JAVA编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的 。每用java命令启动一个java应用程序,就会启动一个JVM进程 。在同一个JVM进程中,有且只有一个进程,就是它自己 。在这个JVM环境中,所有程序代码的运行都是以线程来运行 。
一般常见的Java应用程序都是单线程的 。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程 。当main方法结束后,主线程运行完成 。JVM进程也随即退出。
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存 。因此,线程间的通信很容易,速度也很快 。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难 。
线程分为两类:用户线程和守候线程 。当所有用户线程执行完毕后,JVM自动关闭 。但是守候线程却不独立与JVM,守候线程一般是有操作系统或用户自己创建的 。
2.线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程 。
下图显示了一个线程完整的生命周期 。
文章插图
- 新建状态:使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态 。它保持这个状态直到程序 start() 这个线程 。
- 就绪状态:当线程对象调用了start()方法之后,该线程就进入就绪状态 。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度 。
- 运行状态:如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态 。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态 。
- 阻塞状态:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态 。在睡眠时间已到或获得设备资源后可以重新进入就绪状态 。可以分为三种:
- 等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态 。
- 同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用) 。
- 其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态 。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态 。
- 死亡状态:一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态 。
Java 提供了三种创建线程的方法:
- 通过实现 Runnable 接口;
- 通过继承 Thread 类本身;
- 通过 Callable 和 Future 创建线程 。
创建一个线程,最简单的方法是创建一个实现 Runnable 接口的类 。
为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
下面是一个创建线程并开始让它执行的实例:
package org.java.base.thread;public class RunnableDemo implements Runnable{@Overridepublic void run() {System.out.println(“我是线程”);}}通过继承Thread来创建线程
创建一个线程的第二种方法是创建一个新的类,该类继承 Thread 类,然后创建一个该类的实例 。
该方法尽管被列为一种多线程实现方式,但是本质上也是实现了 Runnable 接口的一个实例 。
package org.java.base.thread;public class ThreadDemo extends Thread{@Overridepublic void run() {System.out.println(“我是线程”);}}Thread 方法
【JAVA线程的那些事?】下表列出了Thread类的一些重要方法:
推荐阅读
- 白琳与政和的区别介绍
- 铁观音的冲泡艺术
- MySQL 中常见的字符串函数应用详解
- 东方美人茶的特征
- java 判断IP地址是否合法,是IPV4,还是IPV6
- 安化黑茶的年代如何辨别
- 超全、超详的Spring Boot配置讲解笔记
- 各种紧压茶的茶类介绍
- 茶叶的分类划分介绍
- 软件架构-解密电商系统-秒杀的原理和开发思路