请教执行顺序问题

poorbug 2010-05-17 02:50:04
我顺序启动了六个线程,线程ID依次设置为从0到5。
线程的作用就是调用一个同步方法,打出自己的id.
按我的理解,应该是按线程的启动顺序,线程0先执行,然后线程1,线程2。。。线程5.
但实际的运行结果却是随机的,有时候第一个执行的甚至不是线程0.

请问,这是为什么,如果我想让线程按照我的启动顺序来执行的话,应该做什么?谢谢。

代码如下:

public class TestABCD {
public static void main(String args[]) {
TestABCD test = new TestABCD();
for (int i = 0; i < 6; i++) {
ThreadTest threadTest = test.new ThreadTest();
threadTest.setName(String.valueOf(i));
Thread t = new Thread(threadTest);
t.start();
}
}

private synchronized void doSomething(String id) {
try {
System.out.println("Thread ID: " + id);
} catch (Exception e) {
e.printStackTrace();
}
}

class ThreadTest implements Runnable {
String id = "";
public void run() {
doSomething(id);
}

public void setName(String id) {
this.id = id;
}
}
}
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
poorbug 2010-05-17
  • 打赏
  • 举报
回复
受教了。谢谢大家。
平淡面对 2010-05-17
  • 打赏
  • 举报
回复
有点问题,应该为:

public static void main(String args[]) {
TestABCD test = new TestABCD();
for (int i = 0; i < 6; i++) {
ThreadTest threadTest = test.new ThreadTest();
threadTest.setName(String.valueOf(i));
Thread t = new Thread(threadTest);
t.setPriority(Thread.MAX_PRIORITY - i);
t.start();
}
}


平淡面对 2010-05-17
  • 打赏
  • 举报
回复
可以用priority控制。


public static void main(String args[]) {
TestABCD test = new TestABCD();
for (int i = 0; i < 6; i++) {
ThreadTest threadTest = test.new ThreadTest();
threadTest.setName(String.valueOf(i));
Thread t = new Thread(threadTest);
t.start();
t.setPriority(Thread.MAX_PRIORITY - i);
}
}


laorer 2010-05-17
  • 打赏
  • 举报
回复
既然用了线程,就应该知道线程的启动与完成是不定的

你用了start只是标记这个线程可以开始了,但他具体有没有开始,就不由你管了,
soli11722984 2010-05-17
  • 打赏
  • 举报
回复
LZ。。。。这个麻烦去看看关于CPU的运行机制
problc 2010-05-17
  • 打赏
  • 举报
回复
要同步的话为什么要用线程方式呢?
直接同步调用不就行了

62,614

社区成员

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

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