您的位置 首页 java

java并发编程-线程睡眠的几种方式?释放锁吗?

java中让 线程 睡眠使用Thread.sleep(100)方法,其中括号中参数指定毫秒数。但是如果面试官问你,除了Thread.sleep(100)方法,还有其他的语法吗?Thread.sleep() 释放锁吗?这篇文章我们一起来学习下,本文参考think in java。

线程睡眠通过sleep方法

我们通过一个例子来学习下,代码如下截图:

输出结果如下:

程序分析:

1、在main()主线程中,开启一个分支线程,分支线程无限循环的输出打印时间和睡眠1秒。大家运行程序的时候会发现,Thread.sleep()是不释放锁的,你可以脑补睡着的时候抱着这把锁不放。

2、主线程Thread.sleep(10000) 睡眠10秒钟,然后调用子线程的interrupt()方法将其打断,子线程输出”当前现场被打断”,程序终止。

3、通过子线程的interrupt()方法打断后,在异常体return返回,同时会清除打断的状态。也就是说,如果你不return,程序就算被打断,程序还是会继续的无限循环的执行下去。不信你可以将return注释试试看程序运行的结果。所以我们要注意sleep()的时候可能抛出InterruptedException。

4、子线程的异常不会返回到main()中,因为线程是隔离的环境运行,如果想在Main()函数捕获异常,后面我们在学习,如果你想知道,可以翻开think in java自学。

线程睡觉的另一种语法

线程睡眠还可以通过 TimeUnit 类来处理,它比sleep具有更加好的可读性。我们看下面的代码截图:

文章来源:智云一二三科技

文章标题:java并发编程-线程睡眠的几种方式?释放锁吗?

文章地址:https://www.zhihuclub.com/192832.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图