两线程轮流执行

线程1 打印  abcdef
线程2 打印  1234
让线程1,2轮流执行
打印出a1b2c3d4ef
public class TwoThreadTakeTurnsToExecute {
	
	public static void main(String[] args) {
		Task task = new Task();

		new MyThread<String>(1, task).start();
		new MyThread<Integer>(2, task).start();
	}
}

class MyThread<E> extends Thread {

	private int type;
	private Task task;

	public MyThread(int type, Task task) {
		super();
		this.type = type;
		this.task = task;
	}

	@Override
	public void run() {

		if (type == 1) {

			task.printChar();
		} else {
			task.printNumber();
		}
	}

}

class Task {

	List<String> strList;
	List<Integer> integerList;
	boolean strHasRemaiming = true ;
	boolean numberHasRemaiming = true;;

	public Task() {

		strList = new ArrayList<String>();
		strList.add("a");
		strList.add("b");
		strList.add("c");
		strList.add("d");
		strList.add("e");
		strList.add("f");
		

		integerList = new ArrayList<Integer>();
		integerList.add(1);
		integerList.add(2);
		integerList.add(3);
		integerList.add(4);
		

	}

	public synchronized void printChar() {

		for (int i = 0; i < strList.size(); i++) {

			System.out.print(strList.get(i));
			strHasRemaiming = i< strList.size()-1 ;
			try {
				Thread.sleep(500);
				notify();
				if (numberHasRemaiming && strHasRemaiming) {
					wait();
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public synchronized void printNumber() {

		for (int i = 0; i < integerList.size(); i++) {

			System.out.print(integerList.get(i));
			numberHasRemaiming = i< integerList.size()-1 ;
			try {
				Thread.sleep(1000);
				notify();
				if (numberHasRemaiming && strHasRemaiming) {
					wait();
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
}

a1b2c3d4ef

猜你喜欢

转载自someoneneedsme.iteye.com/blog/2203684