目录
一.Thread 类是什么?
二.Thread 类的几个常见属性
三.线程创建
1. 继承Thread,重写 run 方法
2. 实现Runnable,重写 run 方法
3. 继承Thread,使用匿名内部类
4. 实现Runnable,使用匿名内部类
5. 使用 lambda 表达式(最常用)
四.Thread的休眠与等待
1.概念
2.等待的三种方法
3.休眠的两种方法
Demo案例
一.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"); } }