Writing a program with 2 threads which prints alternatively

后端 未结 14 1599
没有蜡笔的小新
没有蜡笔的小新 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:16

    I have created a pretty basic Solution for it using the Reentrant Lock.

    package com.multithreding.trylock;
    
    import java.util.concurrent.locks.ReentrantLock;
    
    public class TryLock extends Thread {
    
        static int intitialCount = 50;          //Value till which you want to print
        int valueToSubtract = 0;                //Value by which difference you want to print the series like 1,2,3
        static ReentrantLock alternate = new ReentrantLock();
    
        public TryLock(String name) {
            this.setName(name);
        }
    
        public void run() {
            while (intitialCount > 1) {         
    
                if (valueToSubtract > 0) {
                    alternate.lock();
                    intitialCount = intitialCount - valueToSubtract;
                    valueToSubtract = 0;
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("value Subtracted " + intitialCount + " by the Thread" + this.getName());
                    alternate.unlock();
                } else {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    valueToSubtract++;
                }
            }
    
        }
    
    }
    
    package com.multithreding.trylock;
    
    public class AlternatePrint {
    
        public static void main(String[] args) throws InterruptedException{
            //You  can add as many thread to print then in different number of series
            TryLock t1 = new TryLock("Odd One");
            TryLock t2 = new TryLock("Even Value");
            t1.start();
            t2.start();
    
        }
    
    }
    

    This solution is modular as well,

    • You can add 'n' number of Threads to print the alternate series. i.e Using 3 thread at once

    • You can also print the series with more than Difference of more than 1. i.e 1,3,5 etc

提交回复
热议问题