我写的
class LN { private int flag = 0; public static char ch = ‘A‘; public static int n = 1; public synchronized void printLetter() { try { if(flag == 0 || flag == 1) { wait(); } else { //System.out.println("flag = " + flag); System.out.print(ch); ch++; flag = (flag + 1) % 3; notifyAll(); } } catch(InterruptedException ex) { ex.printStackTrace(); } } public synchronized void printNumber() { try { if(flag == 2 ) { wait(); } else { //System.out.println("flag = " + flag); System.out.print(n); n++; flag = (flag + 1) % 3; notifyAll(); } } catch(InterruptedException ex) { ex.printStackTrace(); } } } class Letter extends Thread { LN ln; Letter(LN ln) { this.ln = ln; } public void run() { for(int i = 0 ; i< 26; i++) { ln.printLetter(); } } } class Number extends Thread { LN ln; Number(LN ln) { this.ln = ln; } public void run() { for(int i = 0 ; i< 78; i++) { ln.printNumber(); } } } class Practice1 { public static void main(String[] args) { LN ln = new LN(); new Letter(ln).start(); new Number(ln).start(); } }
网上找的
public class ThreadDemo { // 测试 public static void main(String[] args) { Object obj = new Object(); // 启动两个线程 Thread1 t1 = new Thread1(obj); Thread2 t2 = new Thread2(obj); t1.start(); t2.start(); } } class Thread1 extends Thread { private Object obj; public Thread1(Object obj) { this.obj = obj; } public void run() { // 加锁 synchronized (obj) { // 打印1-52 for (int i = 1; i < 53; i++) { System.out.print(i); if (i % 2 == 0) { // 不能忘了唤醒其它线程 obj.notifyAll(); try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class Thread2 extends Thread { private Object obj; public Thread2(Object obj) { this.obj = obj; } public void run() { synchronized (obj) { // 打印A-Z for (int i = 0; i < 26; i++) { System.out.print((char) (‘A‘ + i)); // 不能忘了唤醒其它线程 obj.notifyAll(); try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
时间: 2024-10-17 00:09:22