Java线程之Producer
Producer-Consumer Pattern的参与者:
1. Data参与者
被Producer参与者所创建,并由Consumer参与者所使用。
2. Producer(生产者)参与者
创建Data参与者,并将其传递给Channel参与者。
3. Consumer(消费者)参与者
从Channel参与者获取Data参与者。
4. Channel(通道)参与者
Channel参与者从Producer参与者处接收Data参与者,并将其保管起来。并应Consumer参与者的要求,将Data参与者传送出去。
为了确保安全性,Producer参与者与Consumer参与者要对访问进行共享排斥。
在Producer-Consumer Pattern中,肩负保护安全性使命的是Channel参与者。Channel参与者进行线程之间的共享互斥,让Producer参与者能够正确的将Data参与者送到Consumer参与者手上。
这里,虽然分离了Producer和Consumer之间的交互,Producer参与者不需要等Consumer参与者处理完Data,就可以继续去制造下一个Data,Channel参与者作为Producer和Consumer之间的缓冲区。但是Channel参与者的容量也是有限的,也就是说,当Consumer消费Data的速度小于Producer制造Data的速度时,Channel中的Data数量会持续增加。这里需要对Channel的容量加以控制,否则可能会最后因为内存不足而使得Producer制造不出Data。对于Producer参与者来说,在Channel容量不足的情况下,要予以等待。
引申:
1. 因为Channel参与者的中介,使得Producer和Consumer的多条线程协调合作。
线程为了协调合作,所以必须进行共享互斥,使共享的东西不被损坏。而线程的共享互斥,就是为了让相处合作才进行的。
线程的合作要想“放在中间的东西”,线程的互斥要想“应该保护的东西”
2. 因为Channel参与者的中介,可以使Producer制造出来的多个Data以不同的顺序传递给Consumer。
常见的传递机制有:
-- 队列, 最先收到的先传
-- 堆栈, 最后收到的先传
-- 优先队列, “优先”的东西先传
相关文档:
1、进程与线程:
《1》什么是进程:是指运行中的应用程序,每一个进程都有自己独立的内存空间,
一个应用程序可以同时启动多个进程,(静态)比如(IE,JVM)
《2》什么是线程:是指进程中的一个执行流程, ......
Groovy supports a few neat ways to work with SQL more easily and to make SQL more Groovy. You can perform queries and SQL statements, passing in variables easily with proper handling of statements, connections and exception handling thanks to closures.
import groovy.sql.Sql
def foo = 'cheese ......
Java容器类学习心得
由于我对C++比较熟悉,所以学习Java应该重点体会Java带来的新概念。本文基本上是Java标准库中集合框架的基本概念,没有例子。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。
1. 接口
整个Java容器类的基础是容器接口(例如Collection,Map等接口),而不是类 ......
本文针对jdk6.0中java.lang.Class类的API进行了简单的实例应用,例子简单易懂,比较适合入门级阅读。
实例简介:
/*
*IncludeInnerClass类中包含了三种访问控制的内部类,并且以这三个内部类的引用对象和一个整型数作为属性,在外部类的方法中分别调用了 内部类的方法
*外部类有两个构造方法, ......