/** * 两个线程 交替输出啊a -z 相当于交替输出计数偶数 */ public class Demo02 { public static void main(String[] args) { Chars chars = new Chars(); Thread t1 = new Thread(new A(chars)); Thread t2 = new Thread(new B(chars)); t1.setName("线程一输出:"); t2.setName("线程二输出:"); t1.start(); t2.start(); } } /** * 字符类 */ class Chars { //定义输出的第一个字母 char c = 'a'; //定义一个计数器每次输出一个都要-- 大小是(int)'z'-(int)'a' int count = (int) 'z' - (int) 'a'; } class A implements Runnable { Chars ch; public A(Chars ch) { this.ch = ch; } @Override public void run() { while (ch.count > 0) synchronized (ch) { if (ch.count % 2 == 0) { try { //等待 ch.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //让线程等待0.5秒 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ch.c++); //每次输出计数器-- ch.count--; //唤醒其他线程 ch.notify(); } } } class B implements Runnable { Chars ch; public B(Chars ch) { this.ch = ch; } @Override public void run() { while (ch.count > 0) synchronized (ch) { if (ch.count % 2 == 1) { try { ch.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //让线程等待0.5秒 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ch.c++); ch.count--; //唤醒其他线程 ch.notify(); } } }
用两个线程交替输出a-z (线程安全)
最新推荐文章于 2022-08-09 22:07:23 发布