有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java想要运行奇偶和求和三步

我想运行三个线程奇数(打印奇数No)、偶数(打印偶数No)和求和(打印它们的和),代码工作正常,但程序没有终止。连线程都还在等待

维夫套餐。蒂亚吉。伊文奥德斯特拉德。埃文奥德和苏姆版本

public class EvenOddAndSum
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        EvenOdd obj = new EvenOdd();

        Even e = new Even(obj);
        Odd o = new Odd(obj);
        Sum s = new Sum(obj);
        Thread oddThraed= new Thread(o,"Odd");
        Thread evenThraed= new Thread(e,"Even");
        Thread sumThraed= new Thread(s,"SUM");

        oddThraed.start();
        evenThraed.start();
        sumThraed.start();

    }



}



class EvenOdd 
{
     int seq;
     int evenNo;
     int oddNo=-1;
     int sum=0;  // 0 for odd , 1 for even , 2 for sum 

     public synchronized int getEvenNo()
     {
         System.out.println(Thread.currentThread().getName()+"Before seq"+seq);

        while (true)
        {
            System.out.println(Thread.currentThread().getName() + "waiting ...." + "seq is " + seq);
            if (seq == 1)
            {
                break;
            }
            else
            {

                try
                {
                    wait();
                }
                catch (Exception e)
                {
                    // TODO: handle exception
                }

            }
            System.out.println(Thread.currentThread().getName() + "released ...." + "seq is " + seq);
        }

         System.out.println(Thread.currentThread().getName()+"After seq"+seq);

         evenNo=evenNo+2;
         System.out.println(Thread.currentThread().getName()+" even---------------------------------------->"+evenNo);
         seq=2;
         notifyAll();

         return evenNo;
     }

     public synchronized int getOddNo()
     {
         System.out.println(Thread.currentThread().getName()+"Before seq"+seq);

         while (true)
            {
                System.out.println(Thread.currentThread().getName() + "waiting ...." + "seq is " + seq);
                if (seq == 0)
                {
                    break;
                }
                else
                {

                    try
                    {
                        wait();
                    }
                    catch (Exception e)
                    {
                        // TODO: handle exception
                    }

                }
                System.out.println(Thread.currentThread().getName() + "released ...." + "seq is " + seq);
            }

         System.out.println(Thread.currentThread().getName()+"After seq"+seq);
         oddNo=oddNo+2;
         System.out.println(Thread.currentThread().getName()+" odd---------------------------------------->"+oddNo);
         seq=1;
         notifyAll();

         return oddNo;
     }

     public synchronized int getSum()
     {
         System.out.println(Thread.currentThread().getName()+"Before seq"+seq);

         while (true)
            {
                System.out.println(Thread.currentThread().getName() + "waiting ...." + "seq is " + seq);
                if (seq == 2)
                {
                    break;
                }
                else
                {

                    try
                    {
                        wait();
                    }
                    catch (Exception e)
                    {
                        // TODO: handle exception
                    }

                }
                System.out.println(Thread.currentThread().getName() + "released ...." + "seq is " + seq);
            }

         System.out.println(Thread.currentThread().getName()+"After seq"+seq);
         sum=oddNo+evenNo;
         System.out.println(Thread.currentThread().getName()+" sum---------------------------------------->"+sum);
         seq=0;
         notifyAll();

         return sum;
     }

}



class Even implements Runnable
{
    EvenOdd obj;

    Even(EvenOdd obj)
    {
        this.obj=obj;
    }



    public void run()
    {


        for(int i=0;i<10;i++)
        {
        obj.getEvenNo();
            try{
        //  Thread.sleep(1000);
            }catch (Exception e) {
                // TODO: handle exception
            }
        }   
    }
}

class Odd implements Runnable
{
    EvenOdd obj;

    Odd(EvenOdd obj)
    {
        this.obj=obj;
    }

    public void run()
    {

        for(int j=1;j<10;j++)
        {
            obj.getOddNo();
        }   
    }
}

class Sum implements Runnable
{
    EvenOdd obj;

    Sum(EvenOdd obj)
    {
        this.obj=obj;
    }

    public void run()
    {

        for(int k=1;k<10;k++)
        {
            obj.getSum();
        }   
    }
}

共 (0) 个答案