多线程顺序打印a-z字符

代码如下: 

/**
 * 
 * @author pc
 *2019年5月28日
 *打印a-z 字符,其中一个线程打印元音字符,一个线程打印辅音字符
 */
public class PrintChar {
	ReentrantLock lock=new ReentrantLock();
	private Condition conditionA = lock.newCondition();   
	private Condition conditionB = lock.newCondition();  

	private static char c='a';
	private static List list;
	static {
		list=Arrays.asList('a','e','i','o','u');
	}
	public static void main(String[] args) {
		PrintChar printChar = new PrintChar();
		new Thread(printChar.new MyThreadA()).start();
		new Thread(printChar.new MyThreadB()).start();

	}

	class MyThreadA implements Runnable{//打印辅音
		@Override
		public void run() {
			while (c<='z') {
				lock.lock();
				try {
					while (list.contains(c)) {//当前是元音字母
						try {
							conditionA.await();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					System.out.println(Thread.currentThread().getName()+":"+c++);
					conditionB.signal();
				} finally {
					lock.unlock();
				}
			}
		}
	}
	class MyThreadB implements Runnable{//打印元音
		@Override
		public void run() {
			while (c<='z') {
				lock.lock();
				try {
					while (!list.contains(c)) {//当前是辅音字母
						try {
							conditionB.await();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					System.out.println(Thread.currentThread().getName()+":"+c++);
					conditionA.signal();
				} finally {
					lock.unlock();
				}
			}
		}
	}
}

打印结果:

Thread-1:a
Thread-0:b
Thread-0:c
Thread-0:d
Thread-1:e
Thread-0:f
Thread-0:g
Thread-0:h
Thread-1:i
Thread-0:j
Thread-0:k
Thread-0:l
Thread-0:m
Thread-0:n
Thread-1:o
Thread-0:p
Thread-0:q
Thread-0:r
Thread-0:s
Thread-0:t
Thread-1:u
Thread-0:v
Thread-0:w
Thread-0:x
Thread-0:y
Thread-0:z

转载于:https://my.oschina.net/woniuyi/blog/3055075

你可能感兴趣的:(多线程顺序打印a-z字符)