两个线程分元音、辅音顺序打印26个小写字母

之前就想写下来这个面试题,一直在没有电脑的时候意淫要写。

最近在看多线程,然后自己写一个做个笔记。

package com.zhehekeji.excelimport.execute;

import java.util.concurrent.locks.ReentrantLock;

public class LetterOrderOut {

    private static String[] letters = new String[]{"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 static int letterIndex = 0;

    private static ReentrantLock lock = new ReentrantLock();

    private static boolean vowelFlag(String str) {
        return "aeiou".contains(str);
    }

    public static void main(String[] args) {
        Thread vowel = new Thread(new Vowel());
        Thread consonant = new Thread(new Consonant());
        vowel.start();
        consonant.start();
    }

    private static class Vowel implements Runnable {
        @Override
        public void run() {
            try {
                while (letterIndex < letters.length) {
                    lock.lock();
                    for (int i = letterIndex; i < letters.length; i++) {
                        if (vowelFlag(letters[letterIndex])) {
                            System.out.println("Vowel: " + letters[letterIndex]);
                            letterIndex++;
                        } else {
                            break;
                        }
                    }
                    lock.unlock();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private static class Consonant implements Runnable {
        @Override
        public void run() {
            try {
                while (letterIndex < letters.length) {
                    lock.lock();
                    for (int i = letterIndex; i < letters.length; i++) {
                        if (!vowelFlag(letters[letterIndex])) {
                            System.out.println("Consonant: " + letters[letterIndex]);
                            letterIndex++;
                        } else {
                            break;
                        }
                    }
                    lock.unlock();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(面试题,Java)