运行通过扩展Thread类创建的3个线程的程序的java输出
我是Java多线程的新手,正在尝试找出下面创建3个线程a、b和c的代码的输出
class A extends Thread {
int i = 0;
public void run() {
System.out.println("Thread A started");
while (i < 4) {
System.out.println("\t value of i in Thread A:" + i);
i++;
}
System.out.println("ThreadA finished");
}
}
class B extends Thread {
public void run() {
int i = 0;
System.out.println("ThreadB started");
while (i < 4) {
System.out.println("\t value of i in Thread B:" + i);
i++;
}
System.out.println("ThreadB finished");
}
}
class C extends Thread {
public void run() {
int i = 0;
System.out.println("ThreadC started");
while (i < 4) {
System.out.println("\t value of i in Thread C" + i);
i++;
}
System.out.println("ThreadC finished");
}
}
public class App {
public static void main(String[] args) throws Exception {
// System.out.println("Hello, World!");
System.out.println("Main Thread started");
A a = new A();
B b = new B();
C c = new C();
Thread th = Thread.currentThread();
System.out.println(th.getName());
System.out.println(th.getPriority());
System.out.println("Priority of A thread " + a.getPriority());
System.out.println("Priority of B thread " + b.getPriority());
System.out.println("Priority of C thread " + c.getPriority());
System.out.println();
th.setPriority(Thread.MAX_PRIORITY);
b.setPriority(Thread.MIN_PRIORITY);
c.setPriority(Thread.NORM_PRIORITY);
System.out.println("Showing new Priorites \n");
System.out.println("Priority of TH thread " + th.getPriority());
System.out.println("Priority of A thread " + a.getPriority());
System.out.println("Priority of B thread " + b.getPriority());
System.out.println("Priority of C thread " + c.getPriority());
System.out.println();
a.start();
b.start();
c.start();
}
}
以上代码的输出是
Main Thread started
main
5
Priority of A thread 5
Priority of B thread 5
Priority of C thread 5
Showing new Priorites
Priority of TH thread 10
Priority of A thread 5
Priority of B thread 1
Priority of C thread 5
ThreadC started
value of i in Thread C0
Thread A started
value of i in Thread A:0
value of i in Thread A:1
value of i in Thread C1
value of i in Thread C2
value of i in Thread C3
ThreadC finished
ThreadB started
value of i in Thread A:2
value of i in Thread A:3
ThreadA finished
value of i in Thread B:0
value of i in Thread B:1
value of i in Thread B:2
value of i in Thread B:3
ThreadB finished
我知道在调用start()方法之后,线程就可以运行了,并且可以由线程调度程序选择
从输出中我们可以看到线程C首先开始运行其run()方法,然后它应该完成其run()方法。但在线程C的run()方法完成之前,线程a的run()方法是如何执行的呢? 谁来帮帮忙
# 1 楼答案
您不应该依赖线程优先级。这就是Oracle JRockit documentation所说的:
您所观察到的是线程调度的系统特定行为的影响。。。如上述文档所述(例如)