
thread.sleep() 引发的疑问
在多线程编程中,使用 thread.sleep() 方法暂停线程时可能会引发疑问,例如:
问题:
在以下代码示例中,thread.sleep(1000*20) 方法被调用。请问此时线程持有的锁是谁?run 对象还是其他对象?
class Run implements Runnable { @Override public void run() { try { System.out.println(Thread.currentThread().getName() + " begin..."); Thread.sleep(1000 * 20); System.out.println(Thread.currentThread().getName() + " over..."); } catch (InterruptedException e) { e.printStackTrace(); } }}public class TestThread { public static void main(String[] args) { Run run = new Run(); new Thread(run).start(); new Thread(run).start(); }}
答案:
豆包AI编程
豆包推出的AI编程助手
483 查看详情
在给定的代码中,线程类没有添加任何显式锁。因此,目前不存在所持有的锁的概念。
解释:
thread.sleep() 方法是静态方法,它会暂停调用它的线程的执行。在这种情况下,run 方法没有synchronized关键字,也没有任何其他类型的锁。因此,thread.sleep() 方法不会获取或释放任何锁。
只有在使用诸如 synchronized 或 reentrantlock 之类的同步机制时,线程才需要获取锁。
以上就是Thread.sleep() 暂停线程时,线程持有的锁是谁?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/438006.html
微信扫一扫
支付宝扫一扫