`

《effective java》之九:并发

    博客分类:
  • Java
阅读更多

第66条:同步访问共享的可变数据:

使用volatile可以在两个线程中通信

public class StopThread {
	private static volatile boolean stopRequested;

	public static void main(String[] args) throws InterruptedException {
		Thread backgroundThread = new Thread(new Runnable() {
			public void run() {
				int i = 0;
				while (!stopRequested)
					i++;
			}
		});
		backgroundThread.start();

		TimeUnit.SECONDS.sleep(1);
		stopRequested = true;
	}
}

 

第67条:避免过度同步:

 千万不要从同步区域内部调用外来方法。尽量限制同步区域内部的工作量。除非迫不得已,否则尽量不要在内部同步类,而是应该让客户在必要的时候从外部同步。

 

第68条:executor和task优先于线程:

 

第69条:并发工具优于wait和notify

 

public class ConcurrentTimer {
	private ConcurrentTimer() {
	} // Noninstantiable

	public static long time(Executor executor, int concurrency,
			final Runnable action) throws InterruptedException {
		final CountDownLatch ready = new CountDownLatch(concurrency);
		final CountDownLatch start = new CountDownLatch(1);
		final CountDownLatch done = new CountDownLatch(concurrency);

		for (int i = 0; i < concurrency; i++) {
			executor.execute(new Runnable() {
				public void run() {
					ready.countDown(); // Tell timer we're ready
					try {
						start.await(); // Wait till peers are ready
						action.run();
					} catch (InterruptedException e) {
						Thread.currentThread().interrupt();
					} finally {
						done.countDown(); // Tell timer we're done
					}
				}
			});
		}

		ready.await(); // Wait for all workers to be ready
		long startNanos = System.nanoTime();
		start.countDown(); // And they're off!
		done.await(); // Wait for all workers to finish
		return System.nanoTime() - startNanos;
	}
}

 

第70条:线程安全性的文档化:

 

第71条:慎用延迟初始化:

 

第72条:不要依赖于线程调度器:

 

第73条:避免使用线程组:

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    Effective.Java_Java8_并发_java_effectivejava_

    目录:一、创建和销毁对象 (1 ~ 7)二、对于所有对象都通用的方法 (8 ~ 12)三、类和接口 (13 ~ 22)四、泛型 (23 ~ 29)五、枚举和注解 (30 ~ 37)六、方法 ...65)九、并发 (66 ~ 73)十、序列化 (74 ~ 78)

    java并发编程实战中文加英文版加源码

    JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...

    JAVA并发编程实践.pdf

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    java并发最佳书籍Java.Concurrency.in.Practice

    最近在学习java并发相关,发现这边书还挺不错的,这本书是多人合著的,作者中不乏牛人,有 Joshua Bloch ( Effective Java 作者)和 Doug Lea 等等(中文中惯用的表示牛人多的说法)。

    java逻辑思维笔试题-effective-java-3rd-edition:有效的Java第3版注释

    java逻辑思维笔试题Effective Java - 第三版笔记 章节索引 02 - 创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 ...

    开源bbs源码java-Share:分享

    Java并发编程实战 Effective Java 重构 改善既有代码的设计(推荐)w J2EE相关 基础 轻量级Java EE企业级应用实战(了解 AOP,IOC) Spring 3.x企业应用开发实战 高级 Spring 技术内幕 (推荐) 深入剖析tomcat (没...

    Effective Akka英文原版PDF

    这本书可以帮助你快速掌握非常棒的并发框架Akka和Actor编程模式。采用强大的Scala语言,Akka的Actor模式可以帮助你减少并发程序的工作量。本书由官方发布,内容简洁,适合新手入门,照着书中的例子可以快速学习如何...

    java8源码-Blog:个人博客,知识积累!

    《Java并发编程实战》 《Java多线程编程核心技术》 《Java并发编程的艺术》 《Java8实战》 《HTTP权威指南》 《Spring实战》(第4版) 《看透SpringMVC源代码分析与实践》 《Redis入门指南》(第2版) 《Redis实战》...

    Java学习资料汇集(书籍、文章、总结)

    这本书通过深入浅出的方式,详细讲解了Java并发编程的原理、技术和常见问题。 当然,除了书籍,还有很多其他类型的学习资料可以帮助你学习Java。比如,你可以参加在线课程、观看教学视频,或者参与编程社区的讨论...

    是主力于Java的唯品会,关于Java的一些小家.rar

    我们结合唯品会的内部经验,参考《Clean Code》、《Effective Java》等重磅资料,增补了一些条目,同时删减了一些相对不那么通用的规则,让规范更精炼易记。 比如《注释规约》中:“所有的类都必须添加创建者和创建...

    java源码书籍-ideaLearning:Java学习的经典书籍

    java 源码书籍 JAVA Learning ...EffectiveJava -&gt; EffectiveJava Java 网络编程精解 -&gt; network Java 并发编程的艺术 -&gt; ArtConcurrentBook 快学Scala -&gt; scala-impatient IdeaLearning -&gt; 个人学习记录

    Effective JavaScript

    由于其语法让人联想到Java,并且具有许多脚本语言的共同特性(如函数、数组、字典和正则表达式),因此,具有少量编程经验的人也能够快速学习JavaScript。新手程序员几乎不需要培训就可以开始编写程序,这要归功于...

    notes:JavaJava后端工程师的学习笔记https

    loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 ...Effective Java , HTTP权威指南 , Java

    Packt.Java.7.Concurrency.Cookbook

    Over 60 simple but incredibly effective recipes for mastering multithreaded application development with Java 7 Master all that Java 7 has to offer for concurrent programming Get to grips with thread ...

    程序员面试刷题的书哪个好-wiki:维基

    《Java并发编程的艺术》 Android 低难度 《Android4高级编程》 中难度 《Android C++高级编程 使用NDK》 《Android应用性能优化》 《Android开发高手进阶》 《深入理解Android 卷3》 《Android群英传》 《SQLite权威...

    代码随想录最新第三版-最强八股文

    Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组...

    javaweb网上购书源码-awesome-books:开发者推荐阅读的书籍

    实战Java高并发程序设计 深入理解Java虚拟机(第2版) JVM高级特性与最佳实践 C++ 书名 豆瓣评分 操作 代码大全(第2版) 前端 书名 豆瓣评分 操作 CSS世界 CSS揭秘 ECMAScript6入门 Head First JavaScript程序设计 ...

    程序员面试刷题的书哪个好-CodeStyleGuidelines:代码风格指南

    程序员面试刷题的书哪个好 luobo-android 开发环境配置 Android Studio 插件安装 打开Settings&gt;Plugins&gt;Browse Repositories安装: FindBugs-IDEA Java代码的静态检查工具。...《Java并发编程的艺术》 And

    这是一篇有关 在线聊天系统 的系统报告书

    more effective handling of customer requests, and has a simpler and more easy database access methods, easy to maintain and update. view of the above program, the system uses Html, JavaScript and ...

    asp.net知识库

    第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象...

Global site tag (gtag.js) - Google Analytics