其实只要记blockied阻塞态和waiting等待态这两个状态即可
blocking状态和waiting状态的区别:
线程竞争锁,没有获取到锁就会进入到blocking阻塞态,获取到锁就会从blocking阻塞态变成running运行态
正在运行的线程1需要等待另一个线程2运行的结果,此时线程1就会主动调用wait()方法,进入waiting等待状态,当其他线程,调用notify方法的时候,就会唤醒处于waiting态的线程,线程被唤醒后并不一定会立即获得锁,而是进入blocked阻塞态,和其他处于blocked阻塞态的线程一起竞争锁,
其他图都不要管,就记下面这张图就行:
1.new状态 新建状态 调用new Thread()线程就进入这个状态了
2.Runnable 运行状态 线程调用start方法后,该线程就会进入运行状态
3.Blocked状态 阻塞状态,没有抢到同步锁就会变成阻塞状态
4.waiting 等待状态 ,占有锁(假设锁是obj对象)的线程调用obj.wait()方法,就会把锁让出去,自己进入这把锁的等待队列里面,只有等占有锁的调用obj.notify()方法,才会去这把锁的等待队列中选一个线程让他占有锁进入runn