本篇文章给大家分享的是有关线程类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中的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。