Java 多线程中 Thread.sleep() 方法调用期间,线程握住的锁是谁?

java 多线程中 thread.sleep() 方法调用期间,线程握住的锁是谁?

thread.sleep() 的疑问

java 多线程编程中,thread.sleep() 方法用于让当前线程进入休眠状态,指定的时间后自动唤醒。在某些情况下,开发者可能会对 thread.sleep() 使用期间锁的归属产生疑问。

我们以一个代码示例为例进行说明:

class Run implements Runnable{
    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + " begin...");
            Thread.sleep(1000*20); // 线程握住的锁是谁?是 run 这个对象?还是谁?
            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();
    }
}

在这个代码示例中,run 类实现了 runnable 接口,并重写了 run 方法。其中,thread.sleep() 方法被用来让当前线程休眠 20 秒。

问题:

在代码示例中,thread.sleep() 调用期间,线程握住的锁是谁?

答案:

代码示例中并没有对任何对象或资源进行加锁,因此当前线程没有持有任何锁。thread.sleep() 方法本身不会获取锁,它只是让当前线程进入休眠状态,直到指定时间结束后才唤醒。

以上就是Java 多线程 Thread.sleep() 方法调用期间,线程握住的锁是谁?的详细内容,更多请关注其它相关文章!