gpt4 book ai didi

java - 已 sleep 线程上的 Sleep() 方法

转载 作者:行者123 更新时间:2023-12-01 16:59:01 29 4
gpt4 key购买 nike

我正在研究多线程,我有一个关于线程 sleep 方法的问题。当我在已经处于 sleep 线程(时间 t2)中执行 sleep()(时间 t1)方法时。总 sleep 时间为 t1+t2 或 t2(如果 t2 > t1)或 t1(如果 t1 > t2):

代码:

我的线程类:

public class SampleThread extends Thread
{
public SampleThread(String msg)
{
super(msg);
start();
}

public void run()
{
try
{
SampleThread.sleep(1000);
System.out.
println("slept for run");
}
catch (InterruptedException e)
{
e.printStackTrace();
}

System.out.
println("extends Thread Class is exited");
}
}

我的主要方法:

public class TestThreads {

public static void main(String[] args) {
SampleThread st = new SampleThread("Extends Thread");
some(st);

System.out.println("main thread Executed");
}
public static void some(SampleThread t2 ){
try {
t2.sleep(10000);
System.out.println("slept for some" );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

结果:

为了运行而 sleep

extends Thread类退出

睡了一会儿

主线程执行

从结果中我可以说,因为 t2.sleep(10000) 的 sleep 时间比 SampleThread.sleep(1000) run() 方法先退出,而不是 main 方法。

但我的问题是需要多少时间。

最佳答案

Sleep 由当前正在运行的线程调用,而不是在线程对象上调用。因此,您在 run 方法中的 sleep 会暂停 Sample 线程,某些方法中的线程会暂停您的主线程(启动程序的线程)。两种不同的执行流程。

sleep 方法实际上是 Thread 的静态方法(您甚至可以这样调用它),它应该已经向您表明,它没有“绑定(bind)”到线程对象。

你不能在同一个线程中调用 sleep 两次,因为调用它必须被唤醒。不存在可加性或优先级问题。

因此,在您的代码中,第二个线程启动,执行其 run 方法并暂停较短的时间。在此期间,主线程继续并暂停很长时间,同时主线程 hibernate ,创建的线程完成 hibernate 然后终止。

关于java - 已 sleep 线程上的 Sleep() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189672/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com