目录
一.Thread 类是什么?
Thread 类是JVM管理线程的一个类,每个线程都有唯一一个 Thread 对象与之关联。
二.Thread 类的几个常见属性
属性 | 获取方法 |
---|---|
ID | getId() |
名称 | getName() |
状态 | getState() |
优先级 | getState() |
是否后台线程 | getPriority() |
是否存活 | isAlive() |
是否被中断 | inInterrupted() |
三.线程创建
1. 继承Thread,重写 run 方法
//1.继承Thread来创建一个线程类 class MyThread extends Thread{ @Override public void run(){ System.out.println("线程"); } } //2.创建 MyThread 的实例 MyThread myThread = new MyThread(); //3.调用 start 方法启动线程 myThread.start();
2. 实现Runnable,重写 run 方法
//1.实现 Runnable 接口 class MyRunnable implements Runnable{ @Override public void run() { System.out.println("线程"); } } //2.创建 Thread 类实例,调用 Thread 的构造方法, 将Runnable 对象作为 target 参数 Thread t = new Thread (new MyRunnable() ); //3.调用 start 方法 t.start();
3. 继承Thread,使用匿名内部类
//1.使用匿名内部类创建 Thread thread = new Thread(){ @Override public void run() { System.out.println("线程"); } }; //2.调用 start 方法 thread.start();
4. 实现Runnable,使用匿名内部类
//1.使用匿名内部类 Runnable接口 创建 Thread t = new Thread(new Runnable() { @Override public void run() { System.out.println("线程"); } }); //2.start t.start();
5. 使用 lambda 表达式(最常用)
//1.lambda表达式 Thread thread = new Thread(()->{ System.out.println("线程"); }); //2.调用start方法 thread.start();
四.Thread的休眠与等待
1.概念
jion
和sleep
都是Thread类的方法,wait()
是object类的方法
-
sleep
睡觉:表示线程等待,是为了暂停线程的执行一段时间,时间到了之后会自动唤醒。
-
join
插队:一个线程运行中调用另外线程的join方法,则当前线程停止执行,等到新join进来的线程执行完毕,才会继续执行!!
-
wait
等待:表示线程等待,为了暂停线程的执行,直到某个条件满足,通常使用notify()
唤醒。
2.等待的三种方法
public void join () | 等待线程结束 |
---|---|
public void join (long millis) | 等待线程结束,最多等待millis毫秒 |
public void join (long millis , int nanos) | 同理,但可以更高精度 |
3.休眠的两种方法
有一点我们要知道,线程的调度是不可控的,所以实际休眠时间是大于参数设置的休眠时间的
public static void sleep(long millis)throws InterruptedException | 休眠当前线程millis毫秒 |
---|---|
public static void sleep(long millis,int nanos)throws InterruptedException | 同理,更高的精度 |
Demo案例
public class Demo { public static void main(String[] args) throws InterruptedException { Thread thread1 = new Thread(()->{ System.out.println(1); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); Thread thread2 = new Thread(()->{ System.out.println(2); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println("OK"); } }