lshh83 发表于 2013-2-5 02:10:53

java多线程经典例子

相信研究多线程的人都会首先从这个经典事例开始:
Stack类:
class Stack {int count;String[] data = new String;public synchronized void push(String str) {while (count == data.length) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notify();data = str;count++;}public synchronized String get() {while (count == 0) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}this.notify();count = count - 1;return data;}}
Producer类:
class Producer implements Runnable {Stack Stackone;public Producer(Stack s) {Stackone = s;}public void run() {String str;for (int i = 0; i < 20; i++) {str = String.valueOf(i + 1);Stackone.push(str);System.out.println("Product:" + str + "   count=" + Stackone.count);try {Thread.sleep((int) (Math.random() * 100));} catch (InterruptedException e) {e.printStackTrace();}}}}
Coumter类:
class Coumter implements Runnable {Stack stackOne;public Coumter(Stack s) {stackOne = s;}public void run() {String s;for (int i = 0; i < 20; i++) {s = stackOne.get();System.out.println("Coumet:" + s + "   count=" + stackOne.count);try {Thread.sleep((int) (Math.random() * 100));} catch (InterruptedException e) {e.printStackTrace();}}}}
StackTest类:
public class StackTest {public static void main(String[] args) {Stack s = new Stack();Producer p = new Producer(s);Coumter c = new Coumter(s);Thread t1 = new Thread(p);Thread t2 = new Thread(c);t1.start();t2.start();}}
运行结果如下:
Product:1   count=1
Coumet:1   count=0
Product:2   count=1
Coumet:2   count=0
Product:3   count=1
Coumet:3   count=0
Product:4   count=1
Coumet:4   count=0
Product:5   count=1
Coumet:5   count=0
Product:6   count=1
Coumet:6   count=0
Product:7   count=1
Product:8   count=2
Product:9   count=3
Coumet:9   count=2
Coumet:8   count=1
Product:10   count=2
Product:11   count=3
Coumet:11   count=2
Product:12   count=3
Product:13   count=4
Coumet:13   count=3
Product:14   count=4
Coumet:14   count=3
Product:15   count=4
Coumet:15   count=3
Coumet:12   count=2
Product:16   count=3
Coumet:16   count=2
Product:17   count=3
Coumet:17   count=2
Product:18   count=3
Coumet:18   count=2
Product:19   count=3
Coumet:19   count=2
Product:20   count=3
Coumet:20   count=2
Coumet:10   count=1
Coumet:7   count=0
页: [1]
查看完整版本: java多线程经典例子