并发编程
文章平均质量分 79
沉默andy
实现自己的理想!
展开
-
跟着实例学习java多线程9-并发容器
并发容器专门为并发而生的,最常用的就是ConcurrentHashMap、BlockingQueue了,这两个并发容器是我们比较常用的,前者取代同步Map提供了很好的并发性,后者提供了一种生产者与消费者模式的队列,ConcurrentHashMap官方介绍说了,它并没有提供在Map上加锁独占访问,这说明什么?这说明它在原子性上是没有保障的,但是它在内存可见性上是完全保证的,也就说如果你需要使用独立原创 2015-02-04 23:19:11 · 797 阅读 · 0 评论 -
跟着实例学习java多线程8-同步容器类的问题
我们知道java有很多线程安全的容器类,我们也知道如果把可变状态的管理交给这些线程安全类来管理就可以实现线程安全,但是我们还可能遇到不可想象的问题。例如:package com.home.thread.thread8;import java.util.Vector;/** * @author gaoxu * 实践出真知! */public class VectorQueue原创 2015-02-04 01:35:40 · 1376 阅读 · 0 评论 -
跟着实例学习java多线程7-对象的组合发布
我们学习线程安全与同步的知识目的就是要实现一些可复用组件或编写出更大的程序。java中类是对象抽象,那么怎么实现一个线程安全类是我们必须要知道的并正确使用的技术。在设计线程安全类的过程中,需要包含以下三个基本元素: 找出构成对象状态的所有变量。 找出约束状态变量的不变性条件。 建立对象状态的并发访问管理策略。package com.hom原创 2015-02-03 00:21:46 · 1211 阅读 · 0 评论 -
跟着实例学习java多线程2-synchronized锁住的是对象还是代码
上一篇文章我们通过一个实例来说明了并发编程为什么要做同步处理,下面我们再来巩固一下。 对象如果拥有可变状态的变量,并且被多线程访问,那么这个时候我们要对可变状态变量的状态改变做原子操作处理。 锁机制是保证这样的操作的一个有效的方法,它可以保证变量的状态在被更新时是在一个原子操作中进行的。 java提供了一种内置锁机制来支持原子性:同步代码块(Sync原创 2015-01-18 15:24:06 · 1092 阅读 · 0 评论 -
跟着实例学习java多线程6-如何正确发布线程安全的对象
我们前面所讲的一切其实都只是为了一个目标那就是能正确发布一个线程安全的对象。一:线程封闭这个很好理解如果一个变量是在一个线程中完成的状态改变,那么这个变量肯定是线程安全的。我们常使用的是栈封闭和ThreadLocal类。在java运行时内存区中有一个虚拟机栈,栈封闭说的就是这个栈,这个栈是线程私有的,它的生命周期与线程相同。虚拟机栈描述描述的是java方法执行的内存模型:每个方法被原创 2015-02-02 02:41:25 · 2326 阅读 · 0 评论 -
跟着实例学习java多线程5-初识volatile变量
同步机制可以保证原子操作和内存可见性,但是同步机制对变量的访问性能是我们不得不考虑的问题,java语言提供了一种弱同步机制,volatile变量。它的原理大致是这样的,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的原创 2015-02-01 23:01:57 · 1329 阅读 · 0 评论 -
跟着实例学习java多线程3-synchronized的多种写法有何区别?
同步代码块是一种有效实现操作原子性的方法,上一章我们讲了一些同步的原子操作的基础。现在我们回忆一下上一章的两个问题。1:不同的synchronized的写法有什么区别,又该怎么写创建线程的代码呢?以class实例对象作为锁的写法写法1package com.home.thread;/** * @author gaoxu * */public class SafeT原创 2015-01-20 23:29:59 · 1158 阅读 · 0 评论 -
跟着实例学习java多线程4-内存可见性
前三篇我们主要说了多线程访问共享可变状态时需要进行正确的同步处理,保证同一时刻只有一个线程访问相同的数据,我们使用synchronized关键字来实现原子性操作。今天我们在来认识一下同步的另一个重要方面:内存可见性,这个概念其实很好理解,就是保证在同一个时刻,共享可变状态对访问它的线程呈现出自己最新的状态变化。我们经常遇到的情景是这样的,一个全局变量计数器,一个线程负责更新该数值,另一些线程获原创 2015-02-01 14:59:51 · 1058 阅读 · 1 评论 -
跟着实例学习java多线程1-为什么使用?
如今的互联网时代、移动互联网时代,我们开发的所有的系统和网站以及服务都要求支持高负载、大并发,要求的是效率,串行的代码已经不能满足我们对执行效率的需求,当然也会白瞎了如今这么好的硬件,现在是个台式机至少都是2核、4核的了,更别说32核、64核的高端服务器,要想充分利用cpu资源那就不能让他们闲着,所以多线程并发也就越来越重要了。线程有很多优势:1、提高多处理器的利用效率2、简化业务功能原创 2015-01-17 23:38:38 · 1060 阅读 · 0 评论 -
跟着实例学习java多线程10-定时任务实例Quartz等
定时任务是我们经常遇到的业务场景,我们有很多的功能都需要这样的技术来实现,例如:定时获取一些数据push出去,定时处理一些清理任务,定时检查某个值等。那么我们该怎么实现,在实现中又该注意一些什么?定时任务就是另开一个线程来执行,其实也是并发的一类,大家可能不好理解,说定时不就是到时间执行一下,怎么还会产生并发,这里主要是看两个指标,一是看执行频率,二是看每次执行的时间,如果执行频率高并且执行任原创 2015-02-07 01:35:13 · 3076 阅读 · 0 评论