以下哪些属于java线程的状态,线程的几种状态分别是什么
如何解决写爬虫IP受阻的问题?立即使用。
Java中的线程的生命周期大体可分为5种状态。
1.初始状态(新):创建新的线程对象。
2.RUNNABLE:线程对象创建后,其他线程(比如主线程)调用对象的start()方法。这种状态下的线程位于可运行线程池中,等待被线程调度选中,获得cpu的使用权。
3.RUNNING:runnable线程获取cpu时间片并执行程序代码。
4.阻塞:阻塞状态是指线程因为某种原因放弃使用cpu的权利,即放弃cpu时间片,暂时停止运行。在线程进入可运行状态之前,没有机会让cpu时间片再次进入运行状态。有三种阻塞情况:
5.DEAD:当线程的run()和main()方法的执行结束,或者run()方法由于异常而退出时,线程结束其生命周期。死线不能复生。
一、线程的状态图
二、初始状态
实现Runnable接口,继承thread可以得到一个Thread类。当new的一个实例出来时,线程进入初始状态。
三、可运行状态
1.可运行状态只意味着你有资格运行。如果您没有被调度程序选中,您将始终是可运行的。
2.调用线程的start()方法,线程进入runnable状态。
3.当当前线程的sleep()方法结束,其他线程join()结束,等待用户输入结束,一个线程获得对象锁,这些线程也会进入runnable状态。
4.当当前线程的时间片用完时,调用当前线程的yield()方法,当前线程将进入可运行状态。
5.锁池中的线程获得对象锁后,进入runnable状态。
四、运行状态
当线程调度器从可运行池中选择一个线程作为当前线程时,线程的状态。这也是线程进入运行状态的唯一途径。
五、死亡状态
1.当一个线程的run()方法完成,或者主线程的main()方法完成,我们就认为它死了。这个线程对象可能是活动的,但它不再是一个单独的线程。线程一旦死亡,就无法复活。
2.在死线程上调用start()方法将引发Java . lang . illegalthreadstateexception异常异常。
六、阻塞状态
1.当前线程T调用Thread.sleep()方法,当前线程进入阻塞状态。
2.当前线程中运行的其他线程t2调用join()方法,当前线程进入阻塞状态。
3.在等待用户输入时,当前线程进入阻塞状态。
七、等待队列(本是Object里的方法,但影响了线程)
1.在调用obj的wait()和notify()方法之前,必须获得obj锁,也就是说,必须在synchronized(obj)代码段中写入。
2.与等待队列相关的步骤和图表
1个线程获得了对象A的锁,并且正在使用对象A。
1线程调用对象a的wait()方法。
1线程释放对象A的锁,立即进入等待队列。
池中的对象竞争对象a的锁。
5线程获得对象A的锁,进入synchronized块,使用对象A。
5线程调用对象A的notifyAll()方法,唤醒所有线程,所有线程进入锁池。线程5调用对象A的notify()方法来唤醒线程。不知道它会唤醒谁,被唤醒的线程进入锁池。
notifyAll()的同步方法结束,线程5释放对象a的锁。
池中的线程竞争对象锁,但是不知道线程1何时可以获得它。原锁池第六步被唤醒的线程一起竞争对象锁。
八、锁池状态
当当前线程要调用对象A的同步方法时,发现对象A的锁被另一个线程占用了。此时,当前线程进入锁池状态。简而言之,锁池中充满了想要竞争对象锁的线程。
当一个线程1被另一个线程2唤醒时,线程1进入锁池状态来竞争对象锁。
锁池的概念只存在于同步环境中,一个对象对应一个锁池。
九、几个方法的比较
Thread.sleep(long millis),当前线程一定调用了这个方法。当前线程被阻塞,但对象锁没有被释放。毫秒后,线程自动唤醒并进入可运行状态。角色:给其他线程执行机会的最佳方式。
Thread.yield(),肯定是当前线程调用了这个方法。当前线程放弃获取的cpu时间片,从运行状态变为可运行状态,让OS重新选择线程。函数:让相同优先级的线程轮流执行,但不能保证它们会轮流执行。实际上并不能保证yield()会达到让出的目的,因为让出的线程可能会被线程调度器再次选择。Thread.yield()不会导致阻塞。
T.join()/t.join(long millis),在当前线程中调用另一个线程1的join方法,当前线程被阻塞,但不释放对象锁。直到线程1的执行完成或者毫秒时间到达,当前线程进入可运行状态。
Obj.wait(),当前线程调用对象的wait()方法,当前线程释放对象锁,进入等待队列。通过notify()/notifyAll()唤醒或等待(长超时)超时时间自动唤醒。
Obj.notify()唤醒在这个对象监视器上等待的单个线程,选择是任意的。NotifyAll()唤醒所有等待这个对象监视器的线程。
推荐教程:《java教程》以上是java线程有哪些状态?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。