关于线程中sleep和优先级的一个问题

zhaoqiubo 2007-05-30 02:54:23
请看如下代码:
public class ThreadTestSleep implements Runnable {
public void run() {

for (int k = 0; k < 5; k++) {
if (k == 2) {
try {
Thread.currentThread().sleep(5000);
} catch (Exception e) {}
}
System.out.println(Thread.currentThread().getName()
+ " : " + k);
}
}

public static void main(String[] args) {
Runnable r = new ThreadTestSleep();
Thread t1 = new Thread(r, "t1_name");
Thread t2 = new Thread(r, "t2_name");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
---------------------
运行结果:
t1_name : 0
t2_name : 0
t1_name : 1
t2_name : 1
t2_name : 2
t1_name : 2
t2_name : 3
t1_name : 3
t2_name : 4
t1_name : 4

------------------
问题如下:
我不明白的是t1比t2的优先级要高。sleep之后为什么t2先打印出来的内容,t1后打印出来了内容呢?t2也要进行sleep啊?
...全文
297 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Supernpc 2007-06-03
  • 打赏
  • 举报
回复
我用楼主的代码运行了5次,每次的结果都是

t1_name : 0
t1_name : 1
t2_name : 0
t2_name : 1
t1_name : 2
t1_name : 3
t1_name : 4
t2_name : 2
t2_name : 3
t2_name : 4

楼主的思路理论上是正确的.但是出现这个问题原因我水平太低解释不清,不管哪本书上都建议过不要用线程的优先级来控制线程之间执行的先后顺序.
zhaoqiubo 2007-06-03
  • 打赏
  • 举报
回复
zhaoqiubo 2007-05-31
  • 打赏
  • 举报
回复
你可以试试,运行结果是我从jb中拷贝出来的。所以我才不明白为什么会这样?
litterfox 2007-05-30
  • 打赏
  • 举报
回复
上面说的不对吧,优先级高的是先休眠,可是它也是时间到後,也是先醒来。
这时优先级低也应该是在睡眠,所以应该始终是t1先被打出来
frilly 2007-05-30
  • 打赏
  • 举报
回复
Thread.currentThread().sleep(5000);

// 优先级高的不是先运行吗??运行不就休眠了吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧