线程的两种创建方式
- 创建一个Thread类,或者一个Thread子类的对象
- 创建一个实现Runnable接口的类的对象
- 一个类要想具有线程功能,需要继承Thread或实现Runnable接口
Thread类
Thread类是一个线程类,它实现了Runnable接口
常用构造方法
常用方法
- start() 方法一个线程只能执行一次
- sleep() 方法设置线程的休眠时间
- 调用 join() 方法的线程会优先执行,调用 join(long millis) 方法的线程最长会运行 millis 毫秒
Runnable接口
- 只有一个方法run();
- Runnable是Java中用以实现线程的接口
- 任何实现线程功能的类都必须实现该接口
线程的生命周期
线程的五个状态:
-
新建(New)
-
可运行(Runnable)
-
正在运行(Running)
-
阻塞(Blocked)
-
终止(Dead)
线程的优先级
-
线程优先级高的线程不一定会先执行,线程优先级越高,先执行执行的概率会更高
-
Java为线程类提供了10个优先级,数字越大优先级越高,优先级可以用整数1-10表示,超出范围会抛出异常,主线程默认优先级为5
-
Thread 类提供了几个优先级常量:
MAX_PRIORITY:线程的最高优先级10
NORM_PRIORITY:线程的默认优先级5
MIN_PRIORITY:线程的最小优先级1 -
Thread 类提供了线程优先级的 get 和 set 方法
线程同步
多线程运行会存在一些问题
- 各个线程通过竞争cpu时间片儿获得运行机会
- 各线程什么时候得到cpu时间片,占用多久,是不可预测的
- 一个正在执行的线程在什么地方被暂停是不可预测的
synchronized关键字
可以确保共享对象在同一时刻只能被一个线程访问
synchronized关键字用在:成员方法、静态方法、语句块
线程间通信
wait()方法:中断方法的执行,使线程等待
notify()方法:随机唤醒处于等待的某一个线程,使其结束等待
notifyAll()方法: 唤醒所有处于等待的线程,使它们结束等待