1. 两个线程分别打印26个英文字母的元音(a,e,i,o,u)和辅音(其他),按字母序输出
方法一:使用wait 和 notify 实现
public class WordsAlternant {
public static String[] letters = {
"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"};
static boolean isYuan(String s) {
switch (s) {
case "a":
return true;
case "e":
return true;
case "i":
return true;
case "o":
return true;
case "u":
return true;
}
return false;
}
public static volatile int index = 0;
public static void main(String[] args) {
Object o = new Object();
new Thread(new Yuan(o)).start();
new Thread(new Fu(o)).start();
}
public static class Yuan implements Runnable {
Object o;
public Yuan(Object o) {
this.o = o;
}
@Override
public void run() {
synchronized(o) {
while (index <= 25) {
if (isYuan(letters[index])) {
System.out.println("元音线程" + letters[index]);
index++;
} else {
try {
notifyAll();
wait();
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
}
}
public static class Fu implements Runnable {
Object o;
public Fu(Object o) {
this.o = o;
}
@Override
public void run() {
while (index <= 25) {
if (!isYuan(letters[index])) {
System.out.println("辅音线程" + letters[index]);
index++;
} else {
try {
notifyAll();
wait();
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
}
}