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(); } }
答案:
在给定的代码中,线程类没有添加任何显式锁。因此,目前不存在所持有的锁的概念。
解释:
thread.sleep() 方法是静态方法,它会暂停调用它的线程的执行。在这种情况下,run 方法没有synchronized关键字,也没有任何其他类型的锁。因此,thread.sleep() 方法不会获取或释放任何锁。
只有在使用诸如 synchronized 或 reentrantlock 之类的同步机制时,线程才需要获取锁。
以上就是Thread.sleep() 暂停线程时,线程持有的锁是谁?的详细内容,更多请关注图灵教育其它相关文章!