线程同步
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();
}
}
原文:http://www.cnblogs.com/denggelin/p/6363361.html