Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我试图用两个不同的线程按顺序打印从1到10的数字,但输出并不总是相同的_Java_Multithreading - Fatal编程技术网

Java 我试图用两个不同的线程按顺序打印从1到10的数字,但输出并不总是相同的

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);

这就是我的代码的样子,代码出了什么问题? 我想打印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);
            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。如果你使用线程,你就失去了对程序流的某种控制