千家信息网

线程类Thread中的方法是什么

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇文章给大家分享的是有关线程类Thread中的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1)currentThread(
千家信息网最后更新 2025年02月04日线程类Thread中的方法是什么

本篇文章给大家分享的是有关线程类Thread中的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1)currentThread(): public static Thread currentThread() 说明:返回当前正在执行的线程对象的引用,即返回调用当前代码的线程对象。

2) join():        public final void join(long millis) throws InterruptedException        参数:等待的时间,可选,不填则默认为0。        说明:                1>强制运行调用join方法的线程,在该线程启动后的millis毫秒内,其它线程无法运行。                2>如果millis的值为0,则表示在该线程运行期间,其它线程无法运行,必须等到该线程结束后其它线程才可以运行。                3>join(long)方法是在内部调用wait(long)方法来实现的等待效果。                3)setDaemon():        public final void setDaemon(boolean on)        说明:将该线程标记为后台线程,该方法必须在启动线程(start()方法)前调用,否则报IllegalThreadStateException异常。         补充:                后台线程:处于后台运行,任务是为其他线程提供服务。也称为"守护线程"或"精灵线程"。JVM的垃圾回收就是典型的后台线程。                特点:                        1>若所有的前台线程都死亡,后台线程自动死亡。                        2>前台线程创建的线程默认是前台线程。                                isDaemon():                public final boolean isDaemon()                说明:判断是否为后台线程:                                4)sleep():        public static void sleep(long millis) throws InterruptedException        说明:让当前正在执行的线程休眠(暂停)指定的毫秒数,进入阻塞状态                                比较:Thread.sleep()与Object.wait()二者都可以暂停当前线程,释放CPU控制权,主要的区别在于Object.wait()在释放CPU同时,释放了持有的对象锁。                     5)yield():        public static void yield()        说明:暂停当前正在执行的线程对象,并执行其他线程,即线程礼让。        注意:暂停当前线程,但不会阻塞该线程,而是让其进入就绪状态。故完全有可能:某个线程调用了yield()之后,线程调度器又把他调度出来重新执行。                6)interrupt():        说明:                1)每个线程都有一个boolean类型的中断标志,当一个线程调用interrupt()方法时,线程的中断标志将被设为true,此时线程处于中断状态。                2)调用线程的interrupt()方法只是将线程的中断标记设为了true,并不会中断一个正在运行的线程。                3)如果在程序中没有去检测线程的中断标志,那么即使将线程的中断标志设为true,线程也一样照常运行。                        应用:                1)当线程调用Thread.sleep()、Thread.join()、object.wait()等方法,都会使当前线程进入到阻塞状态。                2)如果此时(线程处于阻塞状态)调用interrupt()方法将线程中断,则处于阻塞状态的线程会抛出一个异常,并且将线程的中断状态清除掉,这样就可以让线程退出阻塞状态了。                3)Thread.sleep()、Thread.join()、object.wait()等方法的实现中,都包含了对线程中断标识的检测:如果发现中断标志为true则抛出异常并且将中断标志位设置为false。                        isInterrupted():                public boolean isInterrupted()                说明:测试线程是否已经中断,不清除线程的中断状态。                eg:thread.isInterrupted(); 判断thread指向的线程对象是否为中断状态。                interrupted():                public static boolean interrupted()                说明:测试当前线程是否已经中断,并,即将线程的中断标识设为false。                eg:thread.interrupted(); 判断调用thread.interrupted();语句的线程(即当前线程)是否为中断状态。                                7)stop():        [@Deprecated](https://my.oschina.net/jianhuaw)        public final void stop()        说明:终止线程,马上让线程停止运行,并释放该线程所持有的锁!导致数据得不到同步的处理,可能出现数据不一致的问题。                补充:其它停止线程的方法;                1>手动抛出异常来停止线程(推荐):                        优点:在catch块中可以将捕获的异常向上抛出,使得线程停止的事件可以向上传播。                2>使用return停止线程:                        使用interrupt()方法与return结合起来,实现停止线程的功能。                        eg:在run方法中:if (this.isInterrupt()) {return;}        8)suspend():        [@Deprecated](https://my.oschina.net/jianhuaw)        public final void suspend()        说明:                1>挂起线程,使线程进入"阻塞"状态,在调用resume()方法前该线程一直处于阻塞状态。                2>独占公共的同步对象,使得其它线程无法访问公共的同步对象。                3>该方法容易发生死锁:调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁。如果其它线程想通过resume()方法来恢复目标线程,同时必须使用目标线程锁定的资源,就会造成死锁。        举例:当一个线程的run()方法中的程序执行并进入到一个synchronized方法的内部时,如果此时该线程调用suspend()方法被挂起了,那么直到调用resume()方法被唤醒之前,这个synchronized方法将一直处于"暂停"状态,并且"锁未被释放",其它线程就不能调用这个方法了。                9)resume():        [@Deprecated](https://my.oschina.net/jianhuaw)        public final void resume()        说明:恢复线程,恢复被suspend方法挂起的线程        注意:suspend()与resume()容易导致死锁,故应该使用锁对象调用wait()和notify()的机制来代替suspend()和resume()来控制线程。10)getName()/setName():        说明:获取/设置线程的名称        注意:第一个子线程默认的名字:Thread-0

以上就是线程类Thread中的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0