六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 134|回复: 0

java多线程经典例子

[复制链接]

升级  0%

10

主题

10

主题

10

主题

秀才

Rank: 2

积分
50
 楼主| 发表于 2013-2-5 02:10:53 | 显示全部楼层 |阅读模式
相信研究多线程的人都会首先从这个经典事例开始:
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表