24. 写出生产者消费者模式。
生产者消费者模式是比国内法、多线程编程中经典的设计模式,通过分离的执行工作解耦,简化开发模式,他们又可以以不同的熟读生产、消费数据。
sample:服务员在准备食物(生产者),顾客在等待吃(消费者),他们通过共同约定的桌子等存放、取走这些盘子。如果桌子上已经满了服务员(生产者)就等待,如果食物以及给你吃完了顾客(消费者)等待。这里的桌子就是一个共享对象。
特征和优点:
a.简化开发,独立的开发或者并发的编写消费者和生产者,他们之间仅仅需要知道共享对象是谁。
b.生产者不需要关心谁是消费者或者有多少消费者(不管顾客是谁,有多少人)消费者亦然(不管那个服务员)
c.生产者和消费者可以使用不同的速度
d.分离的生产者、消费者在功能上可以写出更简洁、可读、以维护的代码。
多线程中的生产者、消费者问题:
这是一个典型的问题,经典方法:使用wait和notify方法在生产者、消费者线程中合作;在队列满了或者是空的条简写阻塞。java5天界了阻塞队列BlockingQueue数据结构,它隐含了这种机制,就无需wait/notify在二者之间通信,它提供的put()方法将阻塞满了的condition,take()方法将阻塞空的condition。
使用阻塞队列实现生产者消费者:
阻塞队列实现,提供开箱即支持阻塞的方法put()和take(),开发者不用写冗余繁杂的wait-notify实现通信。
BlockingQueue是一个接口,两种实现子类:ArrayBlockingQueue,LinkedBlockingQueue,都是先进先出原则,ArrayBlockingQueue是自然有界的(事先能够预知边界),LinkedBlockingQueue可选边界(无法预知边界)。
Demo:
public class ProducerConsumerInstance{
public static void main(String[] args){
//shared bolckingQueue instance
BlockingQueue sharedQueue = new LinkedBlockingQueue();
//producer
Thread producer = new Thread(new Producer(sharedQueue));
//consumer
Thread consumer = new Thread(new Consumer(sharedQueue));
//run
producer.start();
consumer.start();
}
}
//class Producer
public class Producer implements Runnable{
private final BlockingQueue producerQueue;
public Producer(BlockingQueue shared){
producerQueue = shared;
}
@Override
public void run(){
for(int i = Math.random(); i < 0.999; ){
try{
System.out.println(producer.put(i));
}catch(InterruptedException e){
Syetem.out.print("ERROR by interrupting.");
}
}
}
}
//Consumer class ommit...
25. ThreadLocal的设计理念与作用。
ThreadLocal与其他同步机制相比:
ThreadLocal和其他所有的同步机制,都是为了解决多线程之间对同一个变量的访问导致的冲突问题。
在普通的同步机制中,通过对象加锁来实现多线程对统一变量的安全访问,这时候变量是对个线程共享的,使用这些同步机制,就需要很细致研究分析什么时候对变量读写而需要加锁,什么时候释放锁。
TheadLocal会为每个线程维护一个和该线程绑定的变量的副本,从另一角度,根本上隔离了多个线程之间对同一对象的访问问题,从而就不存在对该变量同步。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时候,将不安全的整个变量封装进ThreadLocal,或者将该对象特定于线程的撞他起状态封装进ThreadLocal。
ThreadLocal不能取代同步机制,两者面对的领域不同;同步机制是为了同步多个线程对相同资源的并发访问,能够使这些线程之间通信。而ThreadLocal是隔离了多个线程的数据共享,拆分为每个线程绑定的变量副本,从根本上就不再是多个线程间的共享变量了。
如果你需要多线程通信,使用同步机制,而仅仅事项隔离线程间的共享冲突,ThreadLocal不错的选择。
ThreadLocal,线程局部变量thread local variable,功能就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立改变自己的副本,而不会和其他线程的副本冲突。
ThreadLocal类的方法:
protected ThreadLocal initialValue(),是为了子类重写,该方法返回当前线程在该线程局部变量的初始值,是延迟电泳方法,在一个线程第一次调用get()或set()执行,只执行一次。
public ThreadLocal get() 返回当前线程的线程局部变量副本
public void set(ThreadLocal val) 设置当前线程的线程局部变量的副本值。
public void remove() 移除当前线程的线程局部变量值,释放资源
相关推荐
"Core Java Interview Questions"这个资源集锦了面试中可能会遇到的一些关键问题,旨在帮助求职者更好地准备Java核心技术的面试。以下是根据描述和标签提炼出的一些核心Java知识点: 1. **Java基础** - 类与对象:...
Core Java Interview Question Page 1
从国外网站上下载的Java面试题。可以看看国外公司的Java面试常用题,以及如何用英文回答。
这本书名为《Core Java Interview》,其内容是关于Java面试的,英文版本,是一本适合想要面试Java职位的求职者的实用指南。它由Sam Atkinson撰写,并在Leanpub网站上出售,于2016年5月21日发布。Leanpub是一种轻量级...
CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了Java语言的基础知识和高级应用。以下是对给定文件的详细解读和知识点总结: 一、原码、反码、补码 * 原码是指一个数的二进制表示形式,...
Core Java for the Impatient 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
【Core Java】是Java编程的基础教程,主要涵盖了Java语言的核心概念和使用方法。在学习Core Java时,首先要理解以下几个关键知识点: 1. **类与对象**:类是面向对象编程的基础,是描述某一类事物共性的抽象,而...
Java.Interview.Guide.How.to.Build.Confidence.With.a.Solid.Understanding.of.Core.Java.Principles.B015HF9SJQ.pdf Java.Interview.Guide.How.to.Build.Confidence.With.a.Solid.Understanding.of.Core.Java....
CoreJava是Java的基础,涵盖了Java Standard Edition (J2SE)的主要内容,包括基本语法、面向对象编程(OO)原则、核心类库的使用等。在学习CoreJava时,我们需要掌握以下几个关键知识点: 1. **编程思想**: - ...
Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】内附资源: Core Java. Volume I. Fundamentals, 8th Edition.pdf ; Core Java. Volume II. Advanced Features, 8th Edition.chm ; Core Java 8th ...
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 6 CoreJava DAY03 数组 11 CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰...
【标题】:“Core Java,Java核心编程” 【描述】:“Java语法基础,Java面向对象编程,图形用户界面(GUI)编程,Java网络编程:Socket编程” 【标签】:“corejava” 在计算机编程领域,Core Java是指Java的...
Interview Questions in Core Java 1.what is a transient variable? A transient variable is a variable that may not be serialized.
《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...
《Core Java》是由Sun Microsystems公司出版的一本权威的Java编程教材,它全面深入地介绍了Java语言的核心概念和技术。这本书是Java开发者的重要参考资料,对于初学者和有经验的开发者都具有很高的学习价值。以下是...
Core Java 学习必备PPT(CoreJava教案)
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 10 CoreJava DAY03 数组 20 CoreJava DAY04 27 CoreJava DAY05 面向对象 31 CoreJava DAY06 类的加载过程、实例化、继承、多态 37 CoreJava DAY07修饰...
《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...