两个线程分别打印 1- 100,A 打印偶数, B打印奇数
package com.demo.thread; public class PrintNumber { private static Object lock = new Object(); private static int i = 1; private static int wait = 1; private static final int TOTAL = 100; public static void main(String[] args) { Thread thread1 = new Thread() { public void run() { while (i <= TOTAL) { synchronized (lock) { if (i % 2 == 1) { System.out.println("thread1 " + i++); } else { lock.notify(); try { lock.wait(wait); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }; Thread thread2 = new Thread() { public void run() { while (i <= TOTAL) { synchronized (lock) { if (i % 2 == 0) { System.out.println("thread2 " + i++); } else { lock.notify(); try { lock.wait(wait); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }; thread1.start(); thread2.start(); } }
package com.demo.thread; public class PrintNum { public static void main(String[] args) { for (int i = 1; i <= 100; ++i) { PrintOddThread printOddThread = new PrintOddThread(i); PrintEvenThread printEvenThread = new PrintEvenThread(i); Thread thread1 = new Thread(printOddThread); Thread thread2 = new Thread(printEvenThread); thread1.start(); thread2.start(); } } } class PrintOddThread implements Runnable { private int i; public PrintOddThread(int i) { this.i = i; } public void run() { if (i % 2 == 1) { System.out.println("thread1 " + i); } } } class PrintEvenThread implements Runnable { private int i; public PrintEvenThread(int i) { this.i = i; } public void run() { if (i % 2 == 0) { System.out.println("thread2 " + i); } } }