线程同步
class SynStack { private char data[] = new char[6]; private int cnt = 0;// 表示数组有效元素的个数 public synchronized void push(char ch) { while (data.length == cnt) { try { this.wait(); } catch (Exception e) { } } this.notify(); data[cnt] = ch; cnt++; System.out.println("生产线程正在生产第" + cnt + "个产品,该产品是:" + ch); } public synchronized char pop() { char ch; while (0 == cnt) { try { this.wait(); } catch (Exception e) { } } this.notify(); ch = data[cnt - 1]; System.out.println("消费线程正在消费第" + cnt + "个产品,该产品是:" + ch); --cnt; return ch; } } class Producer implements Runnable { private SynStack ss = null; public Producer(SynStack ss) { this.ss = ss; } public void run() { char ch; for (int i = 0; i < 26; i++) { try { Thread.sleep(100); } catch (Exception e) { } ch = (char) (‘a‘ + i); ss.push(ch); } } } class Consumer implements Runnable { private SynStack ss = null; public Consumer(SynStack ss) { this.ss = ss; } public void run() { for (int i = 0; i < 26; i++) { try { Thread.sleep(100); } catch (Exception e) { } ss.pop(); } } } public class Test { public static void main(String[] args) { SynStack ss = new SynStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); Thread t1 = new Thread(p); Thread t2 = new Thread(c); t1.start(); t2.start(); } }
时间: 2024-10-25 18:39:04