Concurrent Programming
coder_小刀
投身移动互联网的85后码农
展开
-
ExecutorService 的理解与使用
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。ExecutorService 样例这里有壹個简单的使用Java 实现的转载 2014-09-03 19:53:22 · 777 阅读 · 0 评论 -
java线程池
最近做小米push,涉及到全员用户推送,使用线程池,借这个机会复习下线程池,当作记笔记了。1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?Java1234567new Thread(new Runnable() { @Override public void run() { // TODO原创 2016-04-13 14:52:24 · 844 阅读 · 0 评论 -
CopyOnWriteArrayList的使用
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。转载 2016-04-12 11:35:09 · 1680 阅读 · 0 评论 -
SynchronizedMap和ConcurrentHashMap的深入分析
在开始之前,先介绍下Map是什么?javadoc中对Map的解释如下:An objectthat maps keys to values . Amap cannot contain duplicatekeys; each key can map to at most one value.This interface takes the place of the Dictio转载 2016-04-12 11:03:18 · 584 阅读 · 0 评论 -
对比synchronized与java.util.concurrent.locks.Lock 的异同
简要答案: 1.Lock能完成几乎所有synchronized的功能,并有一些后者不具备的功能,如锁投票、定时锁等候、可中断锁等候等 2.synchronized 是Java 语言层面的,是内置的关键字;Lock 则是JDK 5中出现的一个包,在使用时,synchronized 同步的代码块可以由JVM自动释放;Lock 需要程序员在finally块中手工释放,如果不释放,转载 2016-04-12 10:04:30 · 663 阅读 · 0 评论 -
JAVA ThreadLocal对象浅析
最近在开发过程中,在做一个字典项服务的时候,最开始采用了ThreadLocal对象来缓存数据。在使用ThreadLocal过程中遇到一些问题,这里和大家分享一下。一、 什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本。从线程的角度看,就好像每一个线程都完全拥有该变量。转载 2015-03-18 13:47:37 · 1195 阅读 · 0 评论 -
Hashtable与ConcurrentHashMap区别
ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都要锁住整个结转载 2015-01-26 12:56:42 · 838 阅读 · 0 评论 -
AtomicInteger的介绍和使用
1、类介绍可以用原子方式更新的 int 值。2、使用场景主要用于在高并发环境下的高效程序处理。使用非阻塞算法来实现并发控制。3、API方法摘要 intaddAndGet(int delta) 以原子方式将给定值与当前值相加。 booleancompareAndSet(int expect, int upda原创 2015-01-21 10:13:36 · 1817 阅读 · 0 评论 -
线程同步工具CountDownLatch的使用
CountDownlatch,是一种Sychronizer,它可以延迟线程的进度直到线程的进度到线程到达终止状态。 它本身而言是Java并发包中非常有用的一个类,它可以让某些任务完成以后再继续运行下面的内容,每个任务本身执行完毕后让计数器减一,直到计数器清零后,以下的内容才可以继续运行,否则将阻塞等待。CountDownLatch的一个非常典型的应用场景是:有一原创 2015-01-20 20:50:05 · 984 阅读 · 0 评论 -
控制并发线程数的Semaphore
简介Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是控制流量的红绿灯,比如XX马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的车会看到红灯,不能驶入XX马路,但是如果前转载 2015-01-27 10:31:11 · 793 阅读 · 0 评论 -
ReentrantLock代码剖析之ReentrantLock.lock
ReentrantLock代码剖析之ReentrantLock.lockReentrantLock是java.util.concurrent.locks中的一个可重入锁类。在高竞争条件下有更好的性能,且可以中断。深入剖析ReentrantLock的源码有助于我们了解线程调度,锁实现,中断,信号触发等底层机制,实现更好的并发程序。先来看ReentrantLock最常用的代码lock转载 2015-01-26 20:59:52 · 756 阅读 · 0 评论 -
服务器过载保护
雪球:对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护,可能导致历史累计的超时请求达到一定规模,像雪球一样形成恶性循环。由于系统处理的每个请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况下不能自动恢复。作者bison,腾讯后台开发技术总监。 过载保护,看似简单,但是要做好并不容易。这里用两个曾经经历的反面案例,给出过载保护的直观展现,并附上一转载 2014-11-12 15:09:34 · 1624 阅读 · 0 评论 -
ThreadLocal的使用
package com.bj.thread;import java.text.SimpleDateFormat;public class TestThreadLocal implements Runnable {// SimpleDateFormat is not thread-safe, so give one to each threadprivate static final ThreadL转载 2014-09-04 13:31:25 · 704 阅读 · 0 评论 -
ThreadPool 线程池的使用
import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolTes转载 2014-09-03 20:32:28 · 925 阅读 · 0 评论 -
Java线程池的分析和使用
作者:方腾飞 原文发表于infoQ:http://www.infoq.com/cn/articles/java-threadPool1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建转载 2016-04-14 17:42:07 · 703 阅读 · 0 评论