摘要: 在编写 Java 程序中,我们最常用的除了八种基本数据类型,String 对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!Java 中集合大家族的成员实在是太丰富了,有常用的 ArrayList、HashMap、HashSet,也有不常用的 Stack、Queue,有线程安全的 Vec 阅读全文
posted @ 2016-08-22 14:13 DemonWang 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 概述 MongoDB 是一款跨平台、面向文档的数据库。用它创建的数据库可以实现高性能、高可用性,并且能够轻松扩展。MongoDB 的运行方式主要基于两个概念:集合(collection)与文档(document)。 数据库 数据库是集合的实际容器。每一数据库都在文件系统中有自己的一组文件。一个 Mo 阅读全文
posted @ 2016-08-19 13:03 DemonWang 阅读(445) 评论(0) 推荐(1) 编辑
摘要: 1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 Collection ├List │├LinkedLi 阅读全文
posted @ 2016-08-18 18:43 DemonWang 阅读(251) 评论(0) 推荐(1) 编辑
摘要: 处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大 阅读全文
posted @ 2016-08-10 18:13 DemonWang 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 与前面介绍的锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问。对于final 域,编译器和处理器要遵守两个重排序规则: 下面,我们通过一些示例性的代码来分别说明这两个规则: 这里假设一个线程 A 执行 writer() 方法,随后另一个线程 B 执行 reader() 阅读全文
posted @ 2016-08-09 18:00 DemonWang 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 锁的释放-获取建立的 happens before 关系 锁是 java 并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码: 假设线程 A 执行 writer() 方法,随后线程 B 执行 reader() 方法。根 阅读全文
posted @ 2016-08-08 18:01 DemonWang 阅读(674) 评论(0) 推荐(0) 编辑
摘要: volatile 的特性 当我们声明共享变量为 volatile 后,对这个变量的读/写将会很特别。理解 volatile 特性的一个好方法是:把对 volatile 变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码: 假设有多个线程 阅读全文
posted @ 2016-08-07 23:19 DemonWang 阅读(470) 评论(0) 推荐(1) 编辑
摘要: 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正 阅读全文
posted @ 2016-08-06 16:56 DemonWang 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。 前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依赖性,编译 阅读全文
posted @ 2016-08-05 18:20 DemonWang 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 基础 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间 阅读全文
posted @ 2016-08-05 18:09 DemonWang 阅读(404) 评论(0) 推荐(1) 编辑
点击右上角即可分享
微信分享提示