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

jdk 5.0之前生产者消费者(基于指定大小集合操作)

 
阅读更多
package thread;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest {
	public static final int Storge_Size = 100;
	public static void main(String[] args) {
		ArrayListStorge storge = new ArrayListStorge();

		P p = new P(storge);
		M m = new M(storge);

		Thread t1 = new Thread(p);
		Thread t2 = new Thread(p);
		Thread t3 = new Thread(p);
		Thread t4 = new Thread(p);

		Thread t5 = new Thread(m);
		Thread t6 = new Thread(m);
		Thread t7 = new Thread(m);
		Thread t8 = new Thread(m);

		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
		t6.start();
		t7.start();
		t8.start();
	}
}


class ArrayListStorge{
	private List<Integer> list = new ArrayList<Integer>(ArrayListTest.Storge_Size);
	private int num = 1;
	public synchronized void set(ArrayListStorge s){
		while(s.list.size()>=ArrayListTest.Storge_Size){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		s.list.add(num++);
		System.out.println(Thread.currentThread().getName()+"--存入----"+list.get(s.list.size()-1));
		if(s.list.size()>0){
			this.notifyAll();
		}
	}

	public synchronized void out(ArrayListStorge s){
		while(s.list.size()<=0){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(Thread.currentThread().getName()+"--取出....."+s.list.remove(s.list.size()-1));
		if(s.list.size()<ArrayListTest.Storge_Size){
			this.notifyAll();
		}
	}
}

class P implements Runnable{
	private ArrayListStorge storge;
	public P (ArrayListStorge s){
		this.storge = s;
	}
	public void run(){
		while(true){
			this.storge.set(storge);
		}
	}
}

class M implements Runnable{
	private ArrayListStorge s;
	public M(ArrayListStorge s){
		this.s = s;
	}
	public void run(){
		while(true){
			this.s.out(s);
		}
	}
}

分享到:
评论

相关推荐

    JDK1.5 64位绿色版

    JDK1.5,也被称为Java SE 5.0(Java Standard Edition 5.0),是Sun Microsystems在2004年发布的一个重要版本,引入了许多关键性的新特性和改进,对于Java的发展具有里程碑式的意义。 1. **泛型(Generics)** JDK...

    jdk1.5中文帮助文档

    1.5版本,也被称为Java SE 5.0,是一个重要的里程碑,引入了许多创新性的改变,提升了Java的性能、可维护性以及开发者的生产力。 1. **泛型**:JDK 1.5引入了泛型,允许在定义类、接口和方法时指定参数类型,提高了...

    ibm jdk1.5 fou linux

    IBM JDK 1.5 for Linux 是IBM公司针对Java Development Kit (JDK)的一个特定版本,专为Linux操作系统设计。在Java开发和运行环境中,JDK是核心组件,它包含了Java虚拟机(JVM)、编译器、类库以及其他工具,使得开发者...

    java-wrox-Beginning Java 5.0 2005

    《Ivor Horton’s Beginning Java™ 2, JDK™ 5 Edition》是一本非常适合初学者学习Java 5.0的入门书籍。通过本书的学习,不仅可以了解Java的基本语法和面向对象编程的核心概念,还能深入掌握Java 5.0引入的重要新...

    Java泛型

    extends T`用于表示生产者(Producer),适合于读取操作,因为你可以从这样的集合中取出`T`类型或其子类的对象。 - `? super T`用于表示消费者(Consumer),适合于写入操作,因为你可以向这样的集合中添加`T`类型...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java jdk实列宝典 光盘源代码

    生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务...

    java自带并发框架

    - **阻塞队列(Blocking Queues)**:如`ArrayBlockingQueue`和`LinkedBlockingQueue`,在生产者消费者模式中广泛应用,线程安全且高效。 - **并发集合(Concurrent Collections)**:如`ConcurrentHashMap`、`...

    Java并发编程实践-电子书-03章

    这种特性在多线程环境中非常有用,特别是在实现生产者-消费者模式时。 ##### 3.3.2 使用ConcurrentMap实现类 `ConcurrentHashMap`是`ConcurrentMap`的主要实现类,它提供了线程安全的哈希表实现,允许多个线程并发...

    Java基础+Android面试题

    9. Java并发:包括创建线程的三种方式、Synchronized关键字和ReentrantLock的使用、线程池的使用、死锁的处理、生产者/消费者模式等并发编程的核心概念。 10. Java虚拟机:讨论了对象的创建、内存布局、访问定位,...

    java8大知名人物.docx

    3. **Joshua Bloch** - 作为Google的首席Java架构师,Bloch在Sun Microsystems时领导了Java平台的关键特性开发,如JDK 5.0的语法增强和Java集合框架。他的著作《Effective Java》和《Java Concurrency in Practice》...

    想学java,新手学java,怎样才能学好java,java视频教程,零基础学习java--java学习指导文档.doc

    JDK 5.0 & 6.0 新特性 - **泛型**:增强类型安全性,减少强制类型转换。 - **枚举**:提供了一种定义一组命名常量的方法。 - **可变参数**:方法可以接受任意数量的同类型参数。 - **增强的 for 循环**:简化了...

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.文字版

    - 阻塞队列(BlockingQueues)及其在生产者-消费者模式中的应用。 5. **高级并发设计模式** - Future与Callable接口的使用,以及FutureTask类的作用。 - Executor框架的原理与ExecutorService接口的实现。 - ...

    Java多线程-多线程知识点总结和企业真题

    9. **JDK5.0新增线程创建方式**: - 使用`ExecutorService`和`Callable`接口来创建和管理线程池。 - 使用`FutureTask`类来包装一个`Callable`对象,并将其提交到`ExecutorService`中执行。 #### 二、企业真题解析...

    javaSE代码实例

    16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在...

Global site tag (gtag.js) - Google Analytics