91. Print alternate alphabet using two threads - prabhatrocks07/Core-Java-Programming GitHub Wiki

public class PrintAlternateAlphabet {

public static void main(String[] args) {
	char[] ch = {'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'};
	PrintAlphabet printAlphabet = new PrintAlphabet(ch);
	
	new Thread(() -> {
		try {
			printAlphabet.printEven();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}).start();
	
	new Thread(() -> {
		try {
			printAlphabet.printOdd();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}).start();
}

}

class PrintAlphabet {

char[] ch;
int index;

public PrintAlphabet(char[] ch) {
	this.ch = ch;
}

synchronized public void printEven() throws InterruptedException {
	while(index < ch.length) {
		if(index % 2 != 0){
			wait();
		}
		
		if(index < ch.length) {
			System.out.println(ch[index]);
		}	
		
		index++;
		notify();
	}
}

synchronized  public void printOdd() throws InterruptedException{
	while(index < ch.length) {
		if(index % 2 == 0){
			wait();
		}
		
		if(index < ch.length) {
			System.out.println(ch[index]);
		}
		
		index++;
		notify();
	}
	
}
}