课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了Java开发程序员需要掌握的一些线程知识等内容,而本文我们就继续来学习一下,Java编程线程控制方法都有哪些。
1、Daemon
守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分。
当所有非守护线程结束时,程序也就终止,同时会杀死所有守护线程。
垃圾回收线程就是一个的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
main()属于非守护线程。
非守护线程可以转换为守护进程。
2、sleep()
Thread.sleep(millisec)方法会休眠当前正在执行的线程,millisec单位为毫秒。
sleep()可能会抛出InterruptedException,因为异常不能跨线程传播回main()中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。
3、yield()
对静态方法Thread.yield()的调用声明了当前线程已经完成了生命周期中重要的部分,可以切换给其它线程来执行。该方法只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。
4、join()
一旦这个线程执行了这个方法,只有这个线程处于死亡状态其他线程才能执行。
5、wait()\notify()
wait\notify\notifyAll操作都是属于Object类提供的方法,即所有的对象都具有该方法,他们是的一对的,调用的时候不能分开呦。
wait():调用wait方法的线程,当前持有锁的该线程等待,直至该对象的另一个持锁线程调用notify/notifyAll操作。
wait(longtimeOut)、wait(longtimeOut,intnanos)
线程状态转换是,当wait被唤醒或超时,并不是直接进入到运行或者就绪状态,而是先进入到Block状态,抢锁成功后,才能进入到可运行状态。
wait方法在调用进入阻塞之前会释放锁,而sleep或join是不会释放锁的
notify():通知持有该对象锁的所有线程中的的随意一个线程被唤醒
notifyAll():通知持有该对象锁的所有线程被同时唤醒。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。