3 Threads Printing numbers in sequence

前端 未结 14 1513
不思量自难忘°
不思量自难忘° 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条回答
  •  春和景丽
    2021-02-06 00:15

    How about this?

    public class PrintNumbers implements Runnable {
    
        public static final int NO_OF_THREADS = 3;
        public static final int MAX_DIGIT = 20;
        public static final String THREAD_NAME_PREFIX = "t";
    
        volatile int current = 1;
        private Object lock = new Object();
    
        public static void main(String[] args) {
            PrintNumbers printNumbers = new PrintNumbers();
            for (int i = 1; i <= NO_OF_THREADS; i++) {
                new Thread(printNumbers, THREAD_NAME_PREFIX + i).start();
            }
        }
    
        @Override
        public void run() {
            String printThread;
            while (current < MAX_DIGIT) {
                synchronized (lock) {
                    if (current % NO_OF_THREADS != 0) {
                        printThread = THREAD_NAME_PREFIX + current % NO_OF_THREADS;
                    } else {
                        printThread = THREAD_NAME_PREFIX + NO_OF_THREADS;
                    }
    
                    if (!printThread.equals(Thread.currentThread().getName())) {
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
    
                    if (printThread.equals(Thread.currentThread().getName())) {
                        System.out.println(String.format("Thread %s : %s", Thread.currentThread().getName(), current));
                        current = current + 1;
                    }
    
                    lock.notifyAll();
                }
            }
        }
    }
    

提交回复
热议问题