这是我的代码的样子,代码有什么问题? 我想以1,2,3,4,... 10打印数字,但输出为2,1,3,4,6 ...并且每次都会更改,或者是实现此目的的更好方法< / p>
class Th1 extends Thread{
public void run (){
try{
for (int i=1; i<=10; i+=2){
System.out.println ("VALUE OF ODD : "+i);
Thread.sleep (1000);
}
}catch (InterruptedException ie){
System.out.println (ie);
}
}
};
class Th2 implements Runnable{
public void run (){
try{
for (int j=2; j<=10; j+=2){
System.out.println ("VALUE OF EVEN : "+j);
Thread.sleep (1000);
}
}catch (InterruptedException ie){
System.out.println (ie);
}
}
};
class ThDemo6{
public static void main (String [] args) {
Th1 t1=new Th1 ();// object of Thread class
Th2 t2=new Th2 ();// object of Runnable class
Thread t=new Thread (t2);// Runnable is converted into Thread object
System.out.println ("BEFORE START T1 IS : "+t1.isAlive ());
System.out.println ("BEFORE START T2 IS : "+t.isAlive ());
t1.start ();
t.start ();
System.out.println ("AFTER START T1 IS : "+t1.isAlive ());
System.out.println ("AFTER START T2 IS : "+t.isAlive ());
try {
t1.join ();// to make thread to join together for getting performance
t.join ();
} catch (InterruptedException ie) {
System.out.println (ie);
}
System.out.println ("AFTER JOINING T1 IS : "+t1.isAlive ());
System.out.println ("AFTER JOINING T2 IS : "+t.isAlive ());
}
}
答案 0 :(得分:1)
您无法控制哪个线程首先由调度程序获取CPU时间,因此输出可能永远不会按照您期望的顺序进行。 看一下Java线程模型和CPU调度。
编辑
当然,您可以在variabels等上使用锁,但这会损害线程的实际概念,即并行任务。
也许您应该检查是否有两个并行任务。我认为从1到X的计数是一项任务。
答案 1 :(得分:0)
代码有什么问题,它需要产生顺序的结果,但是您使用线程来做到这一点。