线程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