java多线程系列:
前言
前一章简单介绍了什么是进程和线程,本章将重点介绍java中的线程Thread和Runnable
Thread和Runnable简介
Thead类是JDK为我们提供的基于操作系统的线程体系统一接口(操作系统负责线程的管理)。一个Thread对象和操作系统线程关联。
Runnable接口为Thread对象提供具体的执行代码,Thread实现了Runnable的run()方法
创建线程
继承Thread类
public class MyThread extends Thread{
@Override
public void run() {
//业务逻辑
}
public static void main(String[] args) {
Thread myThread= new MyThread();
// 调用start()方法以后,该线程会进入ready状态
// 操作系统会进行调度,根据调度算法线程可能会进入running状态
// 只有线程真正进入running状态以后,CPU才会执行该线程的代码
myThread.start();
}
}
实现Runnable接口
public class MyThread implements Runnable{
@Override
public void run() {
//业务逻辑
}
public static void main(String[] args) {
Thread t = new Thread(new MyThread(),"线程1");
t.start();
}
}
线程状态
- NEW
线程已创建还未开始执行 - RUNNABLE
包括已准备就绪的线程和正在运行running的线程 - BLOCKED
当前线程被阻塞,等待获取监听锁 - WAITING
线程进入无限期等待其他线程的唤醒。以下操作会让线程进入等待状态Object.wait()
Thread.join()
LockSupport.park() - TIMED_WAITING
线程进入有限期的等待,以下方法会让线程进入有限等待状态Thread.sleep(sleeptime)
Object.wait(timeout)
Thread.join(timeout)
LockSupport.parkNanos(timeout)
LockSupport.parkUntil(timeout) - TERMINATED
线程已结束
线程状态转换