前两章讲解了线程同步的问题以及对火车票数量异常进行了分析。我相信,在阅读过程中,没有多线程基础的同学肯定是懵逼的,这些锁锁锁到底是个什么东西呀?继续往下阅读,你就会知道锁就不是个东西。
线程的状态
前面章节已经说了,要实现线程的同步,就得使用锁。在了解锁前,我们先对线程的状态做一个认识。java的线程有六大状态:NEW(新建)、RUNNABLE(运行)、BLOCKED(阻塞)、TIMED_WAITING(超时等待)、WAITING(等待)、TERMINATED(终止、结束)
NEW(新建): 创建一个线程对象,此刻该对象就处于新建状态
RUNNABLE(运行): 调用start()方法后,进入该状态。该状态分为两部分,一部分是就绪状态(ready),一部分是运行状态(running)。就绪状态是说线程获得了锁并且处于就绪队列中,此时线程在等待cpu的资源进行调用。运行状态是线程获得了cpu资源,已经开始运行
BLOCKED(阻塞): 当线程运行到synchronized修饰的方法或者代码块进行锁的竞争,而没有获得锁时就会进去阻塞状态
TIMED_WAITING(超时等待): 调用wait(long timeout)方法,即在指定时间内等待其它线程发起信号
WAITING(等待): 调用()方法,如果其它线程不发起信号,那么该线程将一直等待
TERMINATED(终止、结束): 线程执行完毕
以上就是线程的六种状态。这六种状态中,某些状态的互相转换将在以后进行讲解。
