如果想跟踪多个线程修改某个值的顺序,可以
1.为每个线程命名,也可以使用默认名
2.将线程名+变量值一起输出
3.让主线程等待其他线程结束
输出结果:
如果想改变执行顺序, 可以为线程设定优先级, java提供了10个优先级,但不能与所有操作系统都能映射. Windows 2000有7个优先级, 并且不固定, Sun的Solaris有2的32次方个优先级.如果希望很好的移植, 就要是用MAX_PRIORITY, NORM_PRIORITY, MIN_PRIORITY这三个优先级.
1.为每个线程命名,也可以使用默认名
2.将线程名+变量值一起输出
3.让主线程等待其他线程结束
/**
* Created by IntelliJ IDEA.
* User: Michael
* Date: 9/21/11
* Time: 6:28 PM
* To change this template use File | Settings | File Templates.
*/
public class Machine extends Thread{
private static StringBuffer log = new StringBuffer();
private static int count = 0;
private int a = 0;
public void run(){
for(int i=0; i<20; i++){
a++;
log.append(currentThread().getName()+":a="+a+" ");
if(++count %10==0)
log.append("\n");
}
}
public static void main(String args[])throws Exception{
Machine machine1 = new Machine();
Machine machine2 = new Machine();
machine1.setName("t1");
machine2.setName("t2");
machine1.start();
machine2.start();
while(machine1.isAlive()||machine2.isAlive())
Thread.sleep(500);
System.out.println(log);
}
}
输出结果:
t1:a=1 t1:a=2 t1:a=3 t1:a=4 t1:a=5 t2:a=1 t1:a=6 t2:a=2 t2:a=3 t2:a=4
t2:a=5 t2:a=6 t2:a=7 t1:a=7 t2:a=8 t1:a=8 t1:a=9 t2:a=9 t1:a=10 t2:a=10
t1:a=11 t1:a=12 t2:a=11 t1:a=13 t1:a=14 t2:a=12 t1:a=15 t1:a=16 t2:a=13 t1:a=17
t2:a=14 t1:a=18 t2:a=15 t1:a=19 t1:a=20 t2:a=16 t2:a=17 t2:a=18 t2:a=19 t2:a=20
如果想改变执行顺序, 可以为线程设定优先级, java提供了10个优先级,但不能与所有操作系统都能映射. Windows 2000有7个优先级, 并且不固定, Sun的Solaris有2的32次方个优先级.如果希望很好的移植, 就要是用MAX_PRIORITY, NORM_PRIORITY, MIN_PRIORITY这三个优先级.