running 3 threads in sequence java

前端 未结 10 631
天涯浪人
天涯浪人 2020-11-29 04:35

I have 3 threads 1st printing A 2nd printing B 3rd printing C

I want to print in sequence A B C A B C A B C and so on.....

So I wrote the program below, but

10条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 05:14

    I was asked to write a similar program in an interview with the added condition that it should be extensible in a way that we can provide our own count of threads and they should print characters with the first thread printing 'A' and then the subsequent threads printing B, C, D and so on. Here's how I did it.

    public class AlternateCharPrinter {
    
        public static char ch = 65;
    
        private static void createAndStartThreads(int count) {
            Object lock = new Object();
            for (int i = 0; i < count; i++) {
                new Thread(new AlternateCharRunner((char) (65 + i), lock)).start();
            }
    
        }
    
        public static void main(String[] args) {
            createAndStartThreads(4);
        }
    
    }
    
    class AlternateCharRunner implements Runnable {
    
        private char ch;
        private Object lock;
        private static int runnerCount;
    
        public AlternateCharRunner(char ch, Object lock) {
            this.ch = ch;
            this.lock = lock;
            runnerCount++;
        }
    
        @Override
        public void run() {
            while (true) {
                synchronized (lock) {
                    while (ch != AlternateCharPrinter.ch) {
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println(AlternateCharPrinter.ch++);
                    if (AlternateCharPrinter.ch == (65 + runnerCount)) {
                        AlternateCharPrinter.ch = 65;
                    }
                    lock.notifyAll();
                }
            }
        }
    
    }
    

提交回复
热议问题