目录
一. 创建线程的方法
1.1 继承 Thread 类.
1.2 实现 Runnable 接口.
1.3 lambda表达式创建线程
二. Thread类中的常用方法
2.1 start方法
2.2 run方法
2.3 sleep静态方法
2.4 isDaemoon() and setDaemon()
2.5 isAlive()
2.6 Thread.currentThread()
2.7 interrupt() and isInterrupted()
如果线程在休眠中被终止, 就会抛出异常.
正常终止:
2.8 join()
2.9 getState()
三. 线程状态
一. 创建线程的方法
1.1 继承 Thread 类.
步骤:
a. MyThread类继承Thread类, 重写run方法, 在run代码块中编写具体执行代码.
b. 创建Thread类的子类对象.
c. 使用start来开启一个线程, 再调用run方法执行具体逻辑.
1.2 实现 Runnable 接口.
步骤:
a. MyRunnable类实现Runnable接口, 并重写Runnable接口中的run方法, 在run中编写具体的执行代码.
b. 创建MyRunnable实例化对象.
c. 创建Thread实例化对象, 将runnable对象作为参数传递给Thread类的构造方法.
d. 调用start方法, 开启一个线程, 再调用run方法, 执行代码逻辑.
1.3 lambda表达式创建线程
二. Thread类中的常用方法
2.1 start方法
thread.start();
表示thread线程被启动, 真正地在cpu中创建了一个线程, 在这个过程中, 系统会为这个线程分配资源.
2.2 run方法
thread.run() ;
run方法是线程代码逻辑的入口方法, start一个线程后, 只要线程获取了cpu执行时间, 便会进入run中 执行具体的代码逻辑.
但是如果只调用run方法, 并不会创建一个线程, 只会执行run中的代码.
2.3 sleep静态方法
Thread.sleep();
sleep是Thread类中的静态方法, 表示代码逻辑执行到此处时, 休眠 time/ms.
2.4 isDaemoon() and setDaemon()
isDaemon(thread) 判断thread线程是否是后台进程 (守护进程).
setDaemon() 将thread线程设置为后台进程.
2.5 isAlive()
判断线程是否存活
2.6 Thread.currentThread()
获取当前线程
2.7 interrupt() and isInterrupted()
interrupt(): 终止当前线程. (但是线程对象仍然存在)
isInterrupted(): 判断当前线程是否被终止.
如果线程在休眠中被终止, 就会抛出异常.
正常终止:
2.8 join()
thread.join(time)
表示thread线程最多被等待 time/ms.
thread.join():
表示死等, 直到thread线程结束.
2.9 getState()
thread.getState():
获取当前线程状态.
三. 线程状态
线程状态分为:
a. NEW => new了一个线程对象, 但是还没有start
b. RUNNABLE => 表示这个线程正在执行 或者 随机可以执行
c. TREMINATED => 线程执行完毕, 但是线程对象还在
d. TIME_WAITING => 指定时间的阻塞
e. WAITING => 没有指定时间的阻塞 (死等)
f. BLOCKED => 由于锁导致的阻塞