1、Thread 实现 Runable 接口,多线程实现内容放在 run 方法,或者实现一个 Runable 接口,将改 Runable 设置给线程。
2、Thread 可以设置是否守护线程(setDaemon(boolean on)),守护线程的作用是确保该线程创建的线程退出时,该线程才会退出。
3、Thead 有六种状态,枚举类组成,分别为:
a.NEW:线程还没有执行 start 方法状态
b. RUNABLE:可运行状态,但是在等待某种系统资源,比如 CPU
c. BLOCKED: 将要进入 synchronized 块,但是在等待锁;wait 方法后重入锁快时等待获取锁。
d.WAITING:调用 wait() 、Thread.join()、LockSupport.park() 方法后
e.TIMED_WAITING:wait(long) 、Thread.join(long) 方法后,有时间参数相对于WAITING
f.TERMINATED:线程执行完成
4、Thread.join:阻塞当前前程,直至该线程执行完成
main() {
Thread subThread = new Thread(()-> {
sleep(10000)
// 1
});
subThread.start();
subThrea.join();
//2 只有等待 1 处执行完毕(subThread 执行完毕),才会执行到这里
}
5、wait 方法之后会释放锁,等到超时/被notify 后重新获取锁,锁被持有的如下面的顺序
main(){
Object object = new Object();
new Thread(()-> {
synchronized(object) {// 1 获取锁
object.wait(); // 2 释放锁
// 5 重新获取锁
}
}).start();
new Thread(()-> {
synchronized(object) { // 3 等待上面的线程进入 wait 之后 获取锁
object.notify();
}
// 4 释放锁
}).start();
}