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]