Java并发编程
L-Zhang
这个作者很懒,什么都没留下…
展开
-
sleep和wait区别总结
sleep和wait区别总结来源类: sleep是Thread类的静态方法; wait是Object的方法,可以对任意一个对象调用wait方法使用范围: sleep可以在任何地方使用,必须捕获异常; wait只能在同步控制方法或者同步控制块里面使用,不需要捕获异常锁: sleep不释放锁,不出让系统资源; wait释放了锁,进入线程等待池等待,出让系统资源唤醒: sleep(ms)将一原创 2017-08-16 17:21:20 · 1293 阅读 · 0 评论 -
深入理解Java之线程池
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我转载 2017-09-08 18:37:31 · 318 阅读 · 0 评论 -
Java并发编程之ConcurrentHashMap
ConcurrentHashMapConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。ConcurrentHashM转载 2017-09-01 10:01:22 · 650 阅读 · 0 评论 -
ConcurrentHashMap的锁
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如在get操作的时候它是否也使用了锁来保护?)。转载 2017-08-24 10:18:42 · 7214 阅读 · 1 评论 -
Java并发编程之Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchr转载 2017-09-13 10:52:43 · 285 阅读 · 0 评论 -
ConcurrentHashMap源码分析
HashTable容器是线程安全的,在竞争激烈的并发环境下表现出效率低下的原因是所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据转载 2017-08-21 15:49:28 · 830 阅读 · 0 评论 -
如何提高Java性能?
确认提升性能重要方式首先,你需要知道需要修复什么,然后再开始修复它。同样的规则也适用于这里。例如,如果您的应用程序通过网络接收数据存储。您应该关注网络的数据传输和数据存储在磁盘上,可能是一个RDBMS。 然后分离出它们,要做到这一点你的架构必须松耦合,比如引入异步等等。关于Ebay的架构之一Asynchrony Everywhere避免堵塞尽可能使用异步是一个关键转载 2017-07-01 15:52:22 · 2498 阅读 · 0 评论 -
java并发容器(Map、List、BlockingQueue)
早期同步容器问题Java库本身就有多种线程安全的容器和同步工具,其中同步容器包括两部分:一个是Vector和Hashtable。另外还有JDK1.2中加入的同步包装类,这些类都是由Collections.synchronizedXXX工厂方法。同步容器都是线程安全的,但是对于复合操作,还有些缺点:① 迭代:在查觉到容器在迭代开始以后被修改,会抛出一个未检查异常ConcurrentModificat原创 2017-07-01 15:53:02 · 2364 阅读 · 0 评论 -
ThreadLocal学习
1.ThreadLocal的历史:在jdk1.2推出时开始支持java.lang.ThreadLocal。在J2SE5.0中的声明为:public class ThreadLocal extends ObjectThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread local variable(线程局部变量)。也许把它命原创 2017-07-01 15:53:33 · 2244 阅读 · 0 评论 -
Java中的Copy-On-Write容器
聊聊并发-Java中的Copy-On-Write容器Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyO转载 2017-07-28 11:57:22 · 1321 阅读 · 0 评论 -
Java中的阻塞队列
1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供转载 2017-07-28 11:59:31 · 1421 阅读 · 0 评论 -
Java并发工具包使用指南(全)
1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝转载 2017-07-28 18:19:42 · 3810 阅读 · 0 评论 -
Java并发之AQS详解
原文链接:http://www.cnblogs.com/waterystone/p/4920797.html一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它转载 2017-08-11 11:17:03 · 760 阅读 · 0 评论 -
volatile关键字解析
原文链接:http://www.cnblogs.com/dolphin0520/p/3920373.html本文的核心点:volatile的原理和实现机制 volatile到底如何保证可见性和禁止指令重排序的,摘自《深入理解Java虚拟机》: “观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lo转载 2017-08-11 17:43:45 · 6766 阅读 · 0 评论 -
ThreadLocal详解
ThreadLocal类的作用是为每个线程都创建一个变量副本, 每个线程都可以修改自己所拥有的变量副本, 而不会影响其他线程的副本. 其实这也是解决线程安全的问题的一种方法. 最常见的ThreadLocal使用场景为 用来解决 数据库连接、Session管理等。1.ThreadLocal是怎么实现了多个线程之间每个线程一个变量副本的? 2.每个线程的变量副本是存储在哪里的? 3.ThreadL原创 2017-08-13 16:06:19 · 1079 阅读 · 0 评论 -
StringBuilder在高性能场景下的正确用法
StringBuilder在高性能场景下的正确用法 关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗?还有些同学,还听过三句似是而非的经验:1. Java编译优化后+和StringBuilder的效果一样;2. StringBuilde转载 2017-08-18 14:53:32 · 1873 阅读 · 0 评论 -
高性能场景下,HashMap的优化使用建议
1. HashMap 在JDK 7 与 JDK8 下的差别顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。1.1 获取key的HashCode并二次加工因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。JDK7的做法:h ^= (h >>> 20) ^ (h >>> 12);r转载 2017-08-18 13:56:19 · 934 阅读 · 0 评论 -
Thread类的使用
在前面2篇文章分别讲到了线程和进程的由来、以及如何在Java中怎么创建线程和进程。今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。 以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 若有不正之处,请多多谅解并欢迎批评指正。转载 2017-09-12 11:19:52 · 589 阅读 · 0 评论