Java 我试图用两个不同的线程按顺序打印从1到10的数字,但输出并不总是相同的
这就是我的代码的样子,代码出了什么问题? 我想打印1,2,3,4,…10中的数字,但是输出是2,1,3,4,6…并且它每次都会改变,或者是他们实现这一点的更好方法Java 我试图用两个不同的线程按顺序打印从1到10的数字,但输出并不总是相同的,java,multithreading,Java,Multithreading,这就是我的代码的样子,代码出了什么问题? 我想打印1,2,3,4,…10中的数字,但是输出是2,1,3,4,6…并且它每次都会改变,或者是他们实现这一点的更好方法 class Th1 extends Thread{ public void run (){ try{ for (int i=1; i<=10; i+=2){ System.out.println ("VALUE OF ODD : "+i);
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 ());
}
}
类Th1扩展线程{
公开作废运行(){
试一试{
对于(int i=1;i代码的错误在于它需要生成连续的结果,但您使用线程来实现这一点。您无法控制哪个线程首先由调度程序获取CPU时间,因此输出可能永远不会按您希望的顺序。
看看Javas线程模型和CPU调度
编辑
当然,您可以对变量等使用锁,但这会损害线程的真正概念,即并行任务。
也许你应该检查一下你是否有两个并行任务。我认为从1到X的计数是一个单一任务。我们不是来为你调试代码的,所以请不要发布完整的代码,而是发布一个。这在多线程程序中可能会派上用场。你需要查看两个线程可以共享的外观,以便一次只能运行一个。最简单的解决方案是使用一个线程。要使用两个线程,您需要有效地确保只有一个线程使用锁定运行。我建议只使用带线程包装的Runnable。我从未见过有人这样使用这两个线程。我是多线程新手,您能告诉我吗?他们有没有办法控制Java中的线程执行?操作系统没有控制有一个所谓的调度程序,它按照定义的策略运行,只有他才能决定下一个线程或进程将获得CPU。如果你使用线程,你就失去了对程序流的某种控制