Writing a program with 2 threads which prints alternatively

后端 未结 14 1604
没有蜡笔的小新
没有蜡笔的小新 2020-12-31 20:47

I got asked this question recently in an interview.

Write a program with two threads (A and B), where A prints 1 , B prints 2 and so on until 50 is r

14条回答
  •  不思量自难忘°
    2020-12-31 21:27

    I guess this might help. Although it is not standard but i hope it provides a simpler approach.

    public class ThreadDemo
    {
        public static void main (String [] args)
        {
            PrintDemo pd=new PrintDemo();     
            MyThread1 mt1 = new MyThread1 ("T1",pd);
            MyThread2 mt2 = new MyThread2 ("T2",pd);     
            mt1.start ();
            mt2.start();
        }
    }
    class PrintDemo {
        private boolean oddFlag=true;
        public synchronized void printOdd(int i,String tName){
            if(oddFlag==false){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }   
            }else{
                System.out.println("\nThread "+tName+" count:"+i);
                oddFlag=false;
                notify();
            }
        }
        public synchronized void printEven(int i,String tName){
            if(oddFlag==true){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }   
            }else{
                System.out.println("\nThread "+tName+" count:"+i);
                oddFlag=true;
                notify();
            }
        }   
    }
    class MyThread1 extends Thread
    {
        private PrintDemo pd;
        private String name;
    
        MyThread1(String threadName,PrintDemo pd){
            this.name=threadName;
            this.pd=pd;
        }  
        public void run ()  
        {
           for(int i=1;i<=50;i+=2){
                pd.printOdd(i,name);
           }
        }
    }
    class MyThread2 extends Thread
    {
        private PrintDemo pd;
        private String name;    
        MyThread2(String threadName,PrintDemo pd){
            this.name=threadName;
            this.pd=pd;
        }   
        public void run ()
        {
            for(int i=2;i<=50;i+=2){
                pd.printEven(i,name);                   
            }
        }
    }
    

提交回复
热议问题