`
lshh83
  • 浏览: 159907 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java多线程经典例子

阅读更多
相信研究多线程的人都会首先从这个经典事例开始:
Stack类:
class Stack {
	int count;
	String[] data = new String[20];

	public synchronized void push(String str) {
		while (count == data.length) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();
		data[count] = str;
		count++;
	}

	public synchronized String get() {
		while (count == 0) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();
		count = count - 1;
		return data[count];

	}
}

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics