1.线程状态
- 从操作系统层面:
CPU会将时间片分给可运行状态的线程,使其变成运行状态。
- 从Java API层面:
NEW、RUNNABLE、TERMINATED、BLOCKED、WAITING、TIMED_WAITING
NEW 线程刚被创建,但是还没有调用 start() 方法
Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的 【可运行状态】、【运行状态】 和【阻塞状态】(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为 是可运行)
BLOCKED , WAITING , TIMED_WAITING 都是 Java API 层面对【阻塞状态】的细分
TERMINATED 当线程代码运行结束
2.synchronized关键字
作用:它采用互斥的方式让同一 时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。这样就能保证拥有锁 的线程可以安全的执行临界区内的代码,不用担心线程上下文切换
使用方法:
public void abc() {
synchronized (this) {
log.info("111");
}
}
public synchronized void abd() {
log.info("111");
}
使用synchronized的注意事项:
- 访问共享资源的所有方法都要加锁
- 注意锁住的是不是同一个对象