线程的生命周期:
1,初始状态 :此时线程只处于jvm进程中,只是创建了一个线程对象,并没有真正开始运行
2,可动行状态:调用线程对象的start()方法,此时线程才真正的被创建 进入可行状态,等待cpu的调度“万事俱备 只欠cpu”
3,运行状态:正在运行的线程,此时它拥有cpu的执行权
4,阻塞状态:运行状态中的线程,如果在等待用户输入或调用sleep()和join()方法都会导致阻塞,不一定马上回到运行状态而是回到可运行状态 等待cpu的再次调度
5,排队状态:一个线程调用一个对象的wait()会自动放弃该对象的锁标记。进入等待状态,只有当有另外一线程调用临界资源的notify()notifyAll()方法,建议使用notifyAll()才会将等待队列中的线程释放,进入锁池状态
6, 锁池状态:每个对象都有互斥锁标记,以防止对临界资源的访问造成数据的不一致 ,和数据的不完整性。一个线程拥有一个对象的锁标记后,另一线程访问该对象,必须在锁池中等待。由系统决定那个线程拿到锁标记并运行,注意从锁池状态出来的线程不是马上回到运行状态,而是重新回到可运行状态。等待cpu的调度
7,终止状态:一个线程运行结束后成为终止状态,一个进程中只有所有线程推出后才能终止。 |