首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Thread.sleep()方法是如何工作的?

Thread.sleep()方法是如何工作的?
EN

Stack Overflow用户
提问于 2015-01-25 14:35:14
回答 5查看 155关注 0票数 0

我在这里看到了类似的问题,但我认为我的问题不是重复的。我不明白这个例子:

代码语言:javascript
运行
复制
public static void main(String[] args) throws InterruptedException {
    Thread t1 = new Thread() {
        public void run() {
            System.out.println("t1");
        }
    };

    Thread t2 = new Thread() {
        public void run() {
            System.out.println("t2");
        }
    };


    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);

    System.out.println("main");
}

为什么它总是以相同的顺序打印线程名?

代码语言:javascript
运行
复制
t1
//1 sec pause
t2
//1 sec pause
main 

为什么Thread.sleep(1000)t1.start()之后强迫t2线程等待?为什么t2不立即开始执行run方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-25 15:09:31

将您的程序想象为一个字符串(线程),当您运行您的程序(Thread.start)时,您将开始在该字符串(您的代码)上放置珠子。这意味着一个接一个,如果你睡觉(Thread.sleep) --就像你按你指定的时间放下那条线一样,那么你就不再把珠子放在上面了(对于那些不明白的人来说,这只是简单的类比)。

您所做的是得到您的第一个线程(main),然后启动两个新线程(t1,t2),但是它们到目前为止还没有功能,当您调用Thread.start()时,它们就变成了功能性线程。当前功能线程(main)有一个休眠命令,它将暂停该线程中的所有活动1秒。因此,您的程序排序如下:创建线程1和2 (t1,t2),启动线程1 (t1),然后暂停1秒,然后启动线程2 (t2),然后暂停1秒,然后打印字符串"main";

票数 3
EN

Stack Overflow用户

发布于 2015-01-25 14:37:35

因为此代码中的睡眠方法有一个线程,其中main()在启动另一个线程和启动下一个线程之间运行停顿一秒。

票数 2
EN

Stack Overflow用户

发布于 2015-01-25 14:37:59

当程序以“主”线程开始时,

调用"Thread.start()“分叉执行(导致t1并行开始),然后告诉”主“线程休眠1秒,然后启动第二个线程,然后打印"Main”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28137555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档