Я работаю над вопросом ниже интервью, где мне нужно распечатать алфавит и цифры, используя две темы.Один печатает алфавиты (a, b, c ... z) и другие печатает номера (1,2,3 .... 26).Теперь я должен реализовать это таким образом, чтобы вывод был:
a
1
b
2
...
...
z
26
Поэтому я пришел к следующему коду без синхронизации, но по какой-то причине он не печатает последний алфавит, который является z
class Output {
private static final int MAX = 26;
private static int count = 1;
private static final Queue<Character> queue = new LinkedList<>(Arrays.asList(new Character[] {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}));
private boolean isAlphabet = true;
public void printAlphabet() {
while (true) {
if (count > MAX)
break;
if (!isAlphabet) {
System.err.println(Thread.currentThread().getName() + " : " + queue.remove());
isAlphabet = true;
}
}
}
public void printNumber() {
while (true) {
if (count > MAX)
break;
if (isAlphabet) {
System.err.println(Thread.currentThread().getName() + " : " + count++);
isAlphabet = false;
}
}
}
}
public class PrintAlphabetNumber {
public static void main(String[] args) {
Output p = new Output();
Thread t1 = new Thread(() -> p.printAlphabet());
t1.setName("Alphabet");
Thread t2 = new Thread(() -> p.printNumber());
t2.setName("Number");
t1.start();
t2.start();
}
}
Есть ли проблема в моем коде выше?Также с точки зрения синхронизации это выглядит хорошо или нет?