"多线程的例子"包括了多线程的各个方面

源代码在线查看: pctest.java

软件大小: 656 K
上传用户: bandagemaster
关键词: 多线程 方面
下载地址: 免注册下载 普通下载 VIP

相关代码

				import java.util.*;
				
				//被操作的数据对象,即要被保护的数据对象
				class DataBuff {
				
					private LinkedList buff;
				
					public DataBuff() {
						buff = new LinkedList();
					}
				
					//被同步,保证当某线程增加数据时,所有某它的线程不能对队列的修改
					public synchronized void addString(String str) {
						buff.addLast(str);
						//当队列中只有一个元素时,要想到可能有某它线程在等待
						if (buff.size() == 5) {
							notify();
						}
					}
				
					//被同步,保证当某线程删除数据时,所有某它的线程不能对队列的修改
					public synchronized String removeString() {
						//当队列中没有元素时,此线程应该等待
						while (buff.size() == 0) {
							try {
								wait();
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
						//当队列中有元素时,则返回一个元素
						return (String) buff.removeFirst();
					}
				
				}
				
				//生产者线程,其目的是不断的往队列中增加数据
				class Procedure extends Thread {
				
					private DataBuff buff;
				
					public Procedure(DataBuff buff) {
				
						this.buff = buff;
						start();
				
					}
				
					public void run() {
						int count = 0;
				
						while (count < 40) {
				
							String str = new String("procedure " + count++);
				
							buff.addString(str);
				
							try {
								Thread.sleep(10);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
				
						}
				
					}
				}
				
				//消费者线程,其目的是不断的从队列中取出数据	
				class Consumer extends Thread {
				
					private DataBuff buff;
				
					public Consumer(DataBuff buff) {
				
						this.buff = buff;
						start();
				
					}
				
					public void run() {
				
						while (true) {
				
							System.out.println("remove: " + buff.removeString());
				
						}
				
					}
				}
				
				//main方法所在的类
				public class PCTest {
				
					public static void main(String args[]) {
				
						//注意构造对象的方式
						DataBuff buff = new DataBuff();
						new Procedure(buff);
						new Consumer(buff);
					}
				}			

相关资源