-2

我是 Java 和多线程概念的新手。这是我的实验代码:

public class Multithread implements Runnable {

    Thread t;

    public Multithread(int prior, String name) {
        this.t = new Thread(this, name);
        this.t.setPriority(prior);
        this.t.start();
    }

    public void run() {
        for (int i = 1; i <= 5; i++) {
            if (this.t.getName().equals("thread1")) {
                System.out.println("First Child Thread Loop No " + i);
            }
            else {
                System.out.println("Second Child Thread Loop No " + i);
            }

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }
    }

    public static void main(String[] args) {
        new Multithread(10, "thread1");
        new Multithread(7, "thread2");
    }
}

输出是:

First Child Thread Loop No 1
Second Child Thread Loop No 1
First Child Thread Loop No 2
Second Child Thread Loop No 2
Second Child Thread Loop No 3
First Child Thread Loop No 3
Second Child Thread Loop No 4
First Child Thread Loop No 4
Second Child Thread Loop No 5
First Child Thread Loop No 5

好吧,我希望是这样一个简单的:

First Child Thread Loop No 1
Second Child Thread Loop No 1
First Child Thread Loop No 2
Second Child Thread Loop No 2
First Child Thread Loop No 3
Second Child Thread Loop No 3
First Child Thread Loop No 4
Second Child Thread Loop No 4
First Child Thread Loop No 5
Second Child Thread Loop No 5

我希望第一个线程总是在第二个线程之前执行。请解释我的输出。提前致谢。

4

3 回答 3

5

原因是当线程开始运行时,您无法猜测它们出现的顺序,非常基本的线程问题 - 您可以阅读: http: //www.codeproject.com/Articles/616109/Java-Thread-Tutorialhttp:/ /www.vogella.com/articles/JavaConcurrency/article.html 或任何其他基本线程导师。祝你好运。

于 2013-10-13T10:53:18.497 回答
4

这是一个考虑程序中多线程的模型。想象一下两个人,Thread1 和 Thread2,在不同的房间里独立工作,每个人都按照自己的节奏和不同的茶歇时间安排工作。每个人都可以访问共享的纸张并在其中添加一行。

假设除了一次只有一个人可以写论文的规则之外没有任何协调,您对他们的行将如何交错有任何期望吗?

编辑================================================== =========

计算机线程并非都以相同的有效速度运行。一个人可能会遇到与另一个人不同的缓存未命中。除非系统完全专用于这一应用程序,这是一种难以实现的状态,否则处理器的中断和分时可能会减慢一个线程。

于 2013-10-13T11:05:04.800 回答
0

线程的基本规则:线程何时工作是未定义的。可能是立即,一段时间后,或一个小时后。没有任何保证。

如果你想学习 Java 中的多线程,你一定要开始熟悉并发包。它包含针对常见问题的现成工具。更重要的是:它提供了一种处理多线程解决方案的方法,通过智能代码设计首先避免了大多数问题。

于 2013-10-13T11:23:32.180 回答