`
0704681032
  • 浏览: 5756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java并发编程实践读书笔记入门

阅读更多
package cn.wtu.executor;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;

/**
 *

*版本2... * 使用新版本的并发库改写生产者消费者 * 可以支持取消的版本 * @author JZY 2010-12-7 */ public class ProducerAndConsumer1 { static ExecutorService executorService = Executors.newFixedThreadPool(4); //ExecutorService增强了Executor接口,加入了一些生命周期(liife cycle)的支持 //让线程的关闭更容易 public static void main(String[] args) { BlockingQueue<Food> container= new LinkedBlockingQueue<Food>(); Producer producer = new Producer(container); Consumer consumer = new Consumer(container); Future producerFuture = executorService.submit(producer);//封装成future对象 //增强了一些方法 Future consumerFuture = executorService.submit(consumer); while(!producerFuture.isDone()||!consumerFuture.isDone()) { } //完成任务后 关闭线程池 executorService.shutdown(); System.out.println("退出程序......."); } }

 这些日在在学校无所事事,突然发现了一本好书<<Java并发编程实践>>,作者都是牛人啊...Joshua Bloch jdk CollectionFrameWork缔造者....DougLea教授,jdk并发库的缔造者...Brian Goetz IBM Java社区的大牛..等等

 

额。。这本书真的很好,虽然我现在的水平很多看不懂,理解的不深刻,但一定会努力的学习..不断温故,相信以后工作在大量的时间后会慢慢有所体会..

 

 

 

先发个自己的入门。。。

package cn.wtu.executor;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;

/**
 *  Doug Lea 教授...Joshua Bloch大神  Brian Goetz 哥..
 * 使用新版本的并发库改写生产者消费者
 *  Executor框架的提出 解耦了任务的提出与任务的执行
 * FixedThreadPool内部也内置了一个BlockingQueue private final BlockingQueue<Runnable>
 * workQueue; 用于存储提交给她的任务
 * 
 * @author JZY 2010-12-7
 */
public class ProducerAndConsumer {
	static Executor executor = Executors.newFixedThreadPool(4);

	public static void main(String[] args) {

		BlockingQueue<Food> container = new LinkedBlockingQueue<Food>();
		Producer producer = new Producer(container);
		Consumer consumer = new Consumer(container);

		executor.execute(producer);
		executor.execute(consumer);

	}

}

class Producer implements Runnable {
	// 生产的food将放入这个容器中
	// blockingqueue自己实现了阻塞当你调用get时如果容器为空为阻塞,这样我们就不必在客户端
	// 自己控制
	BlockingQueue<Food> container;

	public Producer(BlockingQueue<Food> container) {
		this.container = container;
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			Food food = produceFood(i);
			// container.add(food); //额 ...add方法是不支持阻塞的...
			try {
				container.put(food);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// System.out.println("生产"+food); 放在这里就是bug
		}
	}

	private Food produceFood(int i) {

		Food food = new Food(i + 1, "食物" + (i + 1));
		System.out.println("生产" + food);// 放在这里是不合适的,有提前
		// 最好放在put方法的内部 真正的加入容器之后
		return food;
	}

}

class Consumer implements Runnable {
	BlockingQueue<Food> container;

	public Consumer(BlockingQueue<Food> container) {
		this.container = container;
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			consumeFood();
		}
	}

	private void consumeFood() {
		Food food;
		try {
			food = container.take();// Retrieves and removes the head of this
									// queue,
			// waiting if necessary until an element becomes available
			System.out.println("消费" + food);// 会存在延迟
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

class Food {
	Integer id;
	String desccibtion;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "Food [id=" + id + ", desccibtion=" + desccibtion + "]";
	}

	public Food(Integer id, String desccibtion) {
		this.id = id;
		this.desccibtion = desccibtion;
	}

	public String getDesccibtion() {
		return desccibtion;
	}

	public void setDesccibtion(String desccibtion) {
		this.desccibtion = desccibtion;
	}
}

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    韩顺平java从入门到精通笔记完整版

    在并发编程部分,笔记会介绍线程的创建和管理,同步机制如synchronized关键字和Lock接口,以及并发工具类如ExecutorService、Semaphore和CountDownLatch。了解这些内容能帮助你在多核环境下编写高效的程序。 对于...

    Java入门学习笔记

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和丰富的类库而...通过阅读并实践这些笔记,初学者不仅可以掌握Java编程,还能培养良好的编程习惯和思维方式,为日后的深入学习和开发工作打下坚实基础。

    java技术从入门到精通(孙鑫)学习笔记

    线程是并发编程的基础,学习如何创建和管理线程,理解同步和互斥的概念,能够让你写出高效的并发程序。 孙鑫老师的书中还会讲解IO流和NIO(非阻塞I/O)系统,这对于读写文件和网络通信至关重要。反射机制允许程序在...

    毕向东史上最适合初学者入门的Java基础视频笔记

    线程是并发编程的基础,笔记会介绍线程的创建方式,如实现Runnable接口和继承Thread类,以及线程同步和互斥的手段,如synchronized关键字和wait()、notify()方法。 最后,笔记可能包含一些Java标准库的常用类和方法...

    JUC高并发编程详细讲解 狂神笔记pdf 从入门到入坟 请与狂神视频配套使用

    Java并发编程是一个重要的主题,特别是在高并发应用中,如服务器端和大数据处理。JUC,全称为Java Util Concurrent,是Java平台提供的一组用于构建高效并发应用的高级API。这个包包含了各种工具类,帮助开发者处理多...

    JAVA入门实例代码及学习笔记

    总的来说,这份【JAVA入门实例代码及学习笔记】是全面掌握JAVA SE开发的宝贵资源,不仅有理论知识的讲解,还有实践代码的示例,对于初学者来说,是快速提升技能的理想材料。通过阅读和实践这些内容,你将能够逐步...

    宋红康java笔记.rar

    6. **多线程**:Java提供了并发编程的支持,包括线程的创建、同步、互斥等。学习Thread类和Runnable接口,以及synchronized关键字、wait()、notify()和notifyAll()方法的使用。 7. **网络编程**:Java的Socket编程...

    韩顺平java从入门到精通1-32课源码笔记

    以上只是《韩顺平java从入门到精通1-32课源码笔记》中的部分核心知识点,实际上,这份资料可能还包含了更多高级主题,如并发编程、Java EE(企业级应用)、框架技术等。通过系统学习和实践,可以逐步成为一名熟练的...

    JAVA零基础入门教程笔记.zip

    【JAVA零基础入门教程笔记】 本教程是针对Java编程语言的初学者精心设计的,旨在帮助没有编程背景的学员快速掌握Java基础知识。任小龙的JAVA教程在网易公开课上提供了丰富的教学资源,配合这些笔记和源代码,学习者...

    java笔记-从浅入深的入门学习

    同时,学习Java的并发编程,包括线程、同步机制(synchronized关键字和Lock接口)以及并发集合(如ConcurrentHashMap),能帮助你编写出多线程环境下的高效程序。 最后,Java的异常处理、垃圾回收机制以及内存管理...

    达内教育 java从入门到高级全套课堂笔记

    "达内教育 Java从入门到高级全套课堂笔记"涵盖了从基础到高级的全面Java学习资源,旨在帮助初学者逐步掌握这门强大的编程语言。 首先,让我们从Java的基础开始。Java是一种面向对象的语言,它的设计哲学是“一次...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及...通过详细阅读和反复实践,初学者可以逐步提高编程技能,理解Java编程的核心思想,从而在软件开发的世界里游刃有余。

    Java工程师面试题-并发编程-高级架构

    Java并发编程.pdf JAVA核心知识点整理.pdf Java高级架构知识点整理.pdf Java高级架构面试知识点整理.pdf JVM与性能优化知识点整理.pdf MySQL性能调优与架构设计解析文档.pdf Nginx入门到实战.pdf springCloud笔记....

    李兴华老师Java基础笔记

    此外,笔记可能还会包含一些高级主题,如设计模式、并发编程、网络编程、数据库操作(JDBC)等。这些内容将帮助读者深入理解Java编程的精髓,提升实际项目开发的能力。 李兴华老师的教学风格通常注重实践与理论的...

    Java网络编程教材

    总的来说,这份"Java网络编程教材"涵盖了广泛的Java网络编程知识,包括但不限于基础概念、API用法、协议解析、并发编程等。对于想要深入理解Java网络编程的初学者来说,这是一个非常宝贵的资源,通过系统学习和实践...

    魔乐java培训课堂笔记.7z

    李兴华老师是魔乐科技(MLDN)的知名讲师,他的Java培训课程深受学员好评,这些课堂笔记将涵盖Java编程的基础到高级概念。 1. **环境搭建**:首先,学习Java需要安装Java Development Kit (JDK),并配置好环境变量...

    JAVA基础笔记个人整理的很详细,绝对全面

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、开源和强大的功能而闻名。这份"JAVA基础笔记"涵盖了从入门到进阶的关键知识点,对于...通过深入阅读并实践其中的示例,初学者可以逐步建立起扎实的Java编程基础。

Global site tag (gtag.js) - Google Analytics