首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程输出未按预期执行

线程输出未按预期执行
EN

Stack Overflow用户
提问于 2016-02-05 14:54:13
回答 1查看 77关注 0票数 1

这是我的程序。

代码语言:javascript
复制
class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                sleep((int)(1000));
            } catch (InterruptedException e) {}
        }
        System.out.println("DONE! " + getName());
    }
}



  class TwoThreadsTest {
    public static void main (String[] args) {
        new SimpleThread("Jamaica").start();
        new SimpleThread("Fiji").start();
    }
}

我得到的输出结果是

代码语言:javascript
复制
0 Jamaica
0 Fiji
1 Fiji
1 Jamaica
2 Jamaica
2 Fiji
3 Fiji
3 Jamaica
4 Fiji
4 Jamaica
5 Fiji
5 Jamaica
6 Fiji
6 Jamaica
7 Fiji
7 Jamaica
8 Jamaica
8 Fiji
9 Fiji
9 Jamaica
DONE! Fiji
DONE! Jamaica

我怀疑..。1)线程牙买加首先被调用,它被要求休眠1000毫秒。然后线程斐济被称为它应该打印,并要求进入睡眠1000毫秒。但是我得到了如上所示的输出。为什么不交替执行和打印jamica和斐济的线程?

EN

回答 1

Stack Overflow用户

发布于 2016-02-05 14:57:55

控制台输出是不同步的,因此它可能会出现类似于近距离情况下的故障。线程正在获取命令以按正确的顺序打印,但是打印本身需要不同的时间。

在启动Jamica之后,让主线程休眠10分钟,这将使两个线程之间保持一定的距离。

代码示例:(基于OP的代码构建):

代码语言:javascript
复制
class TwoThreadsTest extends Thread { // extends Thread addition
    public static void main(String[] args) {
        SimpleThread a = new SimpleThread("A");
        SimpleThread b = new SimpleThread("B");
        a.start();
        try {
            sleep(10); // offsets Console Output de-synchronization
        } catch (InterruptedException ex) {
            // shouldn't happen
        }
        b.start();
    }
}

class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                sleep((int)(1000)); // (int) is redundant
            } catch (InterruptedException e) {}
        }
        System.out.println("DONE! " + getName());
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35218009

复制
相关文章

相似问题

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