Topic: 一个310-035的线程题目,百思不得其解

  Print this page

1.一个310-035的线程题目,百思不得其解 Copy to clipboard
Posted by: ycxct
Posted on: 2006-12-10 14:45

class ThreadTest extends Thread{
int n;
ThreadTest(int n){this.n=n;}
public void run(){
for(int i=0;i<3;i++){
System.out.print("T"+n+" ");
}
}
}

public class test{
test() {
}
public static void main(String[] args) {
Thread t1=new ThreadTest(1);
Thread t2=new ThreadTest(2);
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}

结果怎么看都应该是"T1 T1 T1 T2 T2 T2",上机试验也是如此,可为什么标准答案给出"The behavior is not specified by the java Language Specification"(行为无法用java语言规则说明)呢?

2.Re:一个310-035的线程题目,百思不得其解 [Re: ycxct] Copy to clipboard
Posted by: ycxct
Posted on: 2006-12-10 14:46

望高手赐教,谢啦

3.Re:一个310-035的线程题目,百思不得其解 [Re: ycxct] Copy to clipboard
Posted by: cxp108
Posted on: 2006-12-11 09:06

在该题中的代码在一般情况下的确会得到T1 T1 T1 T2.....这样的结果,但是Specification中并没有任何强制要求得到该结果(即得不到该结果完全合法)。

也就是说线程的Priority设至最高也无法保证该线程可以一直独占CPU运行权,直至run()方法结束。设置Priority只能让JVM在使用线程调度算法对各线程进行调度时,给高Priority更多的机会,但这是没有任何强制性保证的。

4.Re:一个310-035的线程题目,百思不得其解 [Re: ycxct] Copy to clipboard
Posted by: ranchgirl
Posted on: 2006-12-11 09:20

Different OS, you might get different results.

The answer is correct.

5.Re:一个310-035的线程题目,百思不得其解 [Re: ycxct] Copy to clipboard
Posted by: ycxct
Posted on: 2006-12-11 12:08

哦,明白了,书上说过多线程工作不能保证某时段某一个线程一定能得到执行,想不到设置了优先级也不能完全保证,多谢两位了


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923