3 Threads Printing numbers in sequence

前端 未结 14 1593
不思量自难忘°
不思量自难忘° 2021-02-05 23:45

I am trying to write a simple code to print numbers in sequence. Scenario is like

Thread  Number
T1        1
T2        2
T3        3
T1        4
T2        5
T3          


        
14条回答
  •  闹比i
    闹比i (楼主)
    2021-02-06 00:01

    Below is very generic code. i agree it is not good practice to use multiple threads for such cases

    class MultipleThreads implements Runnable {

    AtomicInteger integer;
    
    int max_val = 100;
    
    int remainder;
    int numofThreads;
    
    public MultipleThreads(AtomicInteger integer, int remainder, int numofThreads) {
        this.integer = integer;
        this.remainder = remainder;
        this.numofThreads = numofThreads;
    }
    
    @Override
    public void run() {
        while (integer.intValue() <= max_val) {
            synchronized (integer) {
    
                while (integer.intValue() % numofThreads != remainder) {
                    try {
                        integer.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (integer.intValue() > max_val)
                    break;
                System.out.println("printing :" + Thread.currentThread().getName() + " : " + integer.getAndIncrement());
                integer.notifyAll();
            }
        }
    }
    

    }

    public class ThreadSynchronization {

    public static void main(String[] args) {
        AtomicInteger at = new AtomicInteger(1);
        MultipleThreads th1 = new MultipleThreads(at, 1, 5);
        MultipleThreads th2 = new MultipleThreads(at, 2, 5);
        MultipleThreads th3 = new MultipleThreads(at, 3, 5);
        MultipleThreads th4 = new MultipleThreads(at, 4, 5);
        MultipleThreads th5 = new MultipleThreads(at, 0, 5);
    
        new Thread(th1).start();
        new Thread(th2).start();
        new Thread(th3).start();
        new Thread(th4).start();
        new Thread(th5).start();
    }
    

    }

提交回复
热议问题