温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

线程类Thread中的方法是什么

发布时间:2021-12-17 14:37:26 来源:亿速云 阅读:107 作者:柒染 栏目:云计算

本篇文章给大家分享的是有关线程类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中的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI