零度的博客专栏

全栈式学徒长成记--工欲善其事必先利其器,不积小流无以成江海,不积跬步无以至千里!...

JAVA多线程实现的四种方式以示例

原文出处:https://www.cnblogs.com/felixzh/p/6036074.htmlJava多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、C...

2018-02-28 14:15:56

阅读数:374

评论数:0

Java并发之volatile关键字深入解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由...

2017-11-16 10:58:11

阅读数:316

评论数:0

Java的Unsafe类及compareAndSwap浅析

最近在看jdk7中java.util.concurrent下面的源码中,发现许多类中使用了Unsafe类中的方法来保证并发的安全性,而java 7 api中并没有这个类的相关介绍,在网上查了许多资料,其中http://ifeve.com/sun-misc-unsafe/这个网站详细的讲解了Unsa...

2017-11-14 10:55:06

阅读数:293

评论数:0

并发编程实现模型之(三)Producer-Consumer模式

生产者-消费模式,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责具体处理生产者提交的任务。两者之间通过共享内存缓冲去进行通信。 一、架构模式图: 类图: 生产者:提交用户请求,提取用户任务,并装入内存缓冲区; 消费者:在内存缓冲区中提取并处理任...

2017-11-13 10:27:00

阅读数:806

评论数:0

并发编程实现模型之(二)Master-Worker模式

Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。 一、什么是...

2017-11-10 14:21:15

阅读数:226

评论数:0

并发编程实现模型之(一)Future模式

多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、Guard Susperionsion、不变、生产者-消费者 模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池;    锁(分为内部锁、重入锁、读写锁)、ThreadL...

2017-11-10 09:42:17

阅读数:241

评论数:0

java锁机制:synchronized/lock(Condition)

1、synchronized 把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。 1.1 原子性 原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保...

2017-09-05 16:15:38

阅读数:320

评论数:0

JAVA CAS原理深度分析

java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包。可见CAS的重要性。 CAS CAS:Compare and Swap, 翻译成比较并交换。  java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的...

2017-09-05 13:30:24

阅读数:217

评论数:0

synchronized和lock的实现原理

目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchro...

2017-09-05 10:51:42

阅读数:319

评论数:0

并发容器之CopyOnWriteArrayList及与其他容器对比

一、  CopyOnWriteArrayList原理    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5...

2017-09-04 11:40:35

阅读数:290

评论数:0

BlockingQueue的基本原理

1. 前言 BlockingQueue即阻塞队列,它算是一种将ReentrantLock用得非常精彩的一种表现,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所示:  在Java中,BlockingQueue是一...

2017-04-12 10:44:10

阅读数:424

评论数:0

ReentrantLock使用详解(3)之测试锁与超时

我在上面的这篇博客中,曾经写到过线程在获取锁的过程中是无法中断的。 但是ReentrantLock提供了tryLock()、tryLock(long timeout, TimeUnit unit)、lock.lockInterruptibly() tryLock() 方法试图申请一个锁...

2017-04-12 10:23:59

阅读数:2250

评论数:0

ReentrantLock使用详解(2)之Condition

(1) ReentrantLock的条件对象 通常,线程进入临界区,却发现在某一条件满足之后才能执行,条件对象就是用来管理那些已经获得了锁,但是却不能做有用工作的线程。 一个锁对象可以有一个或多个相关的条件对象,我们可用lock.newCondition()方法获得一个条件对象。 ...

2017-04-12 10:15:52

阅读数:336

评论数:0

ReentrantLock使用详解(1)之lock/unlock

在大多数实际的多线程应用中,两个或两个以上的线程需要共享对同一数据的存取。如果两个线程存取相同的对象,并且每一个线程都调用了一个修改该对象状态的方法,那么线程彼此踩了对方的脚,根据各线程访问数据的次序,可能会产生讹误的对象。这样的一种现象称之为竞争条件。 当然多个线程共享一个变量在实际的应用中有时...

2017-04-12 10:08:08

阅读数:668

评论数:0

java并发编程实战笔记

每一个想学习Java多线程的人,手里至少有这本书或者至少要看这本书,2012年在看这本书的时候,当时正开发支付平台的后台应用,正好给了我大量的实践机会。强烈建议大家多看几遍。 代码中比较容易出现 bug 的场景: 不一致的同步,直接调用 Thread.run ,未被释放的锁,空的同步块...

2017-04-11 09:40:55

阅读数:662

评论数:0

java线程同步的三种方法[synchronized关键字,Lock加锁,信号量Semaphore]

java多线程的难点是在:处理多个线程同步与并发运行时线程间的通信问题。java在处理线程同步时,常用方法有: 1、synchronized关键字。 2、Lock显示加锁。 3、信号量Semaphore。   线程同步问题引入:       创建一个银行账户Account类,在创建并启...

2017-04-01 15:10:17

阅读数:1127

评论数:0

Java线程:CAS浅析

前言        在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。下面以AtomicInteger为例,来看一下是如何实现的。 [java] vi...

2017-03-28 14:11:42

阅读数:280

评论数:0

ThreadPoolExecutor使用和思考(二)-keepAliveTime及拒绝策略

通过上篇文章,我们可以总结出:ThreadPoolExecutor中额定的“工人”数量由corePoolSize决定,当任务数量超过额定工人数量时,将任务缓存在BlockingQueue之中,当发现如果连queue中也放不下时(可能是因为使用有界queue,也可能是使用SynchronousQue...

2017-03-28 14:08:01

阅读数:1465

评论数:0

ThreadPoolExecutor使用和思考(一)-线程池大小设置与BlockingQueue的三种实现区别

工作中多处接触到了ThreadPoolExecutor。趁着现在还算空,学习总结一下。 前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolS...

2017-03-28 10:30:41

阅读数:440

评论数:0

java并发编程-Executor框架+Future

Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为: 并发编程的一种编程...

2017-02-09 11:42:18

阅读数:341

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭