随笔分类 -  java并发编程

摘要:原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多。一个开发Java的开发者,一旦了解了JVM内存模型就能够更加深入地了解该语言的语言特性,可能这个章节更多的是概念,没 阅读全文
posted @ 2017-03-15 14:52 玉曲风 阅读(198) 评论(0) 推荐(0)
摘要:深入理解Java内存模型(一)——基础 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线 阅读全文
posted @ 2017-03-15 14:46 玉曲风 阅读(255) 评论(0) 推荐(0)
摘要:静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自己的程序计数器PC,在任何时刻,一个虚拟机线程只会执行一个方法的代码,这个方法称为该线程的当前方法,如果这个方法不是native的 阅读全文
posted @ 2016-11-18 11:46 玉曲风 阅读(7868) 评论(0) 推荐(1)
摘要:同步包括两方面的含义: 独占性和可见性。 很多人仅仅理解了独占性,而忽略了可见性。 根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。 阅读全文
posted @ 2016-09-23 16:48 玉曲风 阅读(368) 评论(0) 推荐(0)
摘要:Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volati 阅读全文
posted @ 2016-09-21 00:27 玉曲风 阅读(277) 评论(0) 推荐(0)
摘要:当两个线程同时操作同一资源(临界资源),当其中一个线程修改了资源,但是其中一个线程读的还是之前的数据, 这样的结果就是错误的。 我们通过互斥和同步的方式来解决这个问题 建立一个锁对象public final Object lockObj=new Object(); lockObject.wait() 阅读全文
posted @ 2016-09-21 00:24 玉曲风 阅读(162) 评论(0) 推荐(0)
摘要:>>可变状态是至关重要的。 所有的并发问题都可以归结为如何协调并发状态的访问。可变状态越少,就越容易确保线程的安全性。 >>尽量将域声明成final类型,除非需要它们是可变的。 >>不可变对象一定是线程安全的。 不可变对象能极大地降低并发编程的复杂性,它们更为简单而且安全,可以任意共享而无需使用加锁 阅读全文
posted @ 2016-08-06 19:24 玉曲风 阅读(175) 评论(0) 推荐(0)
摘要:定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么久称这个类时线程安全的。 解释:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行, 并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 在线程安全类中 阅读全文
posted @ 2016-05-25 23:15 玉曲风 阅读(668) 评论(0) 推荐(0)