2014-10-11 96 views
0

为什么每次运行此程序时输出的顺序都不相同?是否由于多个线程试图同时访问共享资源?因此,线程执行的方式会是随机的吗?为什么每次运行此程序时输出的顺序都不相同?

我从螺纹4 你好从线程从线程3 输出

的java MyThreadExample 你好从线程1 你好从线3 你好2

的java MyThreadExample 你好从线程1 你好你好from thread 2 Hello from thread 4

java MyThreadExample 
Hello from thread 1 
Hello from thread 4 
Hello from thread 3 
Hello from thread 2 

代码:

import java.io.*; 
import java.lang.*; 

class MyThreadExample { 

public static void main(String[] args) { 
    HelloThread ht1 = new HelloThread(1); 
    HelloThread ht2 = new HelloThread(2); 
    HelloThread ht3 = new HelloThread(3); 
    HelloThread ht4 = new HelloThread(4); 
    ht1.start(); 
    ht2.start(); 
    ht3.start(); 
    ht4.start(); 
    } 
} 

class HelloThread extends Thread { 
    int threadID; 

    HelloThread(int threadID) { 
    this.threadID = threadID; 
    } 

    public void run() { 
    System.out.println("Hello from thread " + this.threadID); 
    } 
} // end Thread 
+0

它与OS有关。一旦线程启动,O将调度线程。一些人得到高度重视,一些人得到低优先级 – 2014-10-11 18:27:23

+1

在编写任何此类代码之前,您应该阅读并发/多线程的基础知识。如果你这样做,那么你就不会有这个问题。 – 2014-10-11 18:29:00

回答

4

你是绝对正确的,那是因为多线程的。

你开始4个线程,每个线程都是自己的 - 它们之间没有逻辑顺序,因此它们中的任何一个都可能会先完成,其中任何一个都可能最后完成。您观察到的序列完全是随机的,并且可能会不时不同。

“是否由于多个线程试图同时访问共享资源?”在上下文中实际上不相关,因为它们之间确实没有共享资源。

+1

'System.out'怎么样? – 2014-10-11 21:33:44

相关问题