java
文章平均质量分 67
李楚男
这个作者很懒,什么都没留下…
展开
-
深入理解Java内存模型(二)——重排序
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依赖性,编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。注意,这里所说的数据依转载 2014-01-10 11:30:29 · 527 阅读 · 0 评论 -
深入理解Java内存模型(一)——基础
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通转载 2014-01-10 11:03:48 · 479 阅读 · 0 评论 -
Fork/Join框架介绍
1、什么是Fork/Join框架Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干个子任务并行的执行,join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+..+1转载 2014-01-10 10:03:09 · 583 阅读 · 0 评论 -
深入理解Java内存模型(六)——final
与前面介绍的锁volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:1、在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序;2、初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。下面,我们通过一些示例性的代码来分别转载 2014-01-22 18:47:24 · 497 阅读 · 0 评论 -
深入理解Java内存模型(三)——顺序一致性
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中一个变量;在另一个线程读同一个变量;而且写和读没有通过同步来排序;当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程程序的内存转载 2014-01-16 10:12:43 · 531 阅读 · 0 评论 -
深入理解Java内存模型(四)——volatile
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { //使用volatile声明64位的long型变量转载 2014-01-20 15:53:20 · 494 阅读 · 0 评论 -
深入理解Java内存模型(五)——锁
锁的释放-获取建立的happens before关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送信息。下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void writer() { //1 a++;转载 2014-01-21 14:05:38 · 554 阅读 · 0 评论 -
第一章 Shiro简介
1.1 简介Apache Shiro是java的一个安全框架。目前使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。Shiro可以非常容易的开发出足够好的转载 2014-02-25 17:36:02 · 501 阅读 · 0 评论 -
volatile变量的运算在并发下一样是不安全的
下面是一段volatile变量自增元算测试:/** * @title VolatileTest.java * @description volatile变量自增运算测试 * @date 2014-02-28 11:48 * @author lichunan * @version 1.0 */public class VolatileTest { public static vo原创 2014-02-28 12:34:49 · 1071 阅读 · 0 评论