java 多线程
annan211
这个作者很懒,什么都没留下…
展开
-
java 实现生产者消费者模式
[code="java"]package cosu_pro.pc;import java.util.Random;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;impor...原创 2014-05-09 10:20:21 · 96 阅读 · 0 评论 -
java Semaphore 信号量详解和实例
生产者线程用于往链表里添加节点,数个工作线程从链表取出节点并处理。对于一般的mutex_lock,mutex_unlock方式,如果这一段时间没有工作,那么工作线程将会不停的调用lock,unlock操作。而这样的操作毫无疑义。在这里系统给我们提供了另外一种同步机制,信号灯,Semaphore。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证...原创 2014-09-12 11:51:28 · 265 阅读 · 0 评论 -
Java锁的种类以及辨析
锁作为并发共享数据,保证一致性的工具,在java平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析Java中常见的锁以及其特性,为大家答疑解惑。1、自旋锁2、自旋锁的其他种类3、阻塞锁4、可重入锁5、读写锁6、互斥...原创 2014-09-12 15:15:19 · 130 阅读 · 0 评论 -
java锁的种类以及辨析(一):自旋锁
[code="java"][/code]Java的多线程安全是基于Lock机制(或者隐式锁synchronized)实现的,而Lock的性能往往不如人意。原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。互斥是一种会导致线程挂起,并在较短的时间内又需要重新调度回原线程的,较为消耗资源的操作。...原创 2014-09-12 16:22:45 · 131 阅读 · 0 评论 -
java 多线程的锁消除
Java 中使用同步 来保证数据的安全性,但是对于一些明显不会产生竞争的情况下,Jvm会根据现实执行情况对代码进行锁消除以提高执行效率。比如下面一段代码[code="java"] package thread;public class SynchronizedDemo { public void fuck(){ DataDemo demo = new Data...原创 2014-09-12 18:31:31 · 150 阅读 · 0 评论 -
java CyclicBarrier 循环阻塞
java CyclicBarrier 循环阻塞原创 2014-09-12 22:43:31 · 117 阅读 · 0 评论 -
java 多线程之 CyclicBarrier
CyclicBarrier (周期障碍)类可以帮助同步,它允许一组线程等待整个线程组到达公共屏障点。CyclicBarrier 是使用整型变量构造的,其确定组中的线程数。当一个线程到达屏障时(通过调用 CyclicBarrier.await()),它会被阻塞,直到所有线程都到达屏障,然后在该点允许所有线程继续执行。与CountDownLatch不同的是,CyclicBarrier 所有公共线程都到...原创 2014-09-13 19:25:09 · 99 阅读 · 0 评论 -
java CountDownLatch 实例
Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。 你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。 ...原创 2014-09-15 18:07:16 · 93 阅读 · 0 评论 -
并发模式下的单例创建
[size=medium]单例模式的创建 分为很多种,这里就不一一列举,这里简单分析一下单例模式的效率和线程安全性。 传统的单例模式是[/size] [code="java"] package thread;public class SingletoDemo { public static SingletoDemo instance = null; ...原创 2014-09-29 16:20:20 · 104 阅读 · 0 评论 -
java 高性能运算--并发队列
[size=small] JDK 提供了两套并发队列的实现,一个是以 ConcurrentLinkedQueue 为代表的高性能队列,一个是以 BlockingQueue接口为待变的阻塞队列,都继承自Queue接口。 ConcurrentLinkedQueue 是一个适用于高并发场景下的队列。它通过无锁的方式,实现了高并发状态下的高性能,通常情况下,ConcurrentLin...原创 2014-10-15 15:33:37 · 440 阅读 · 0 评论 -
java 高性能运算-- 双端队列
[size=small] JDK 1.6中 提供了一种双端队列,简称 Deque. 这里简要介绍 三种双端队列, LinkedList ArrayDeque 和 LinkedBlockingDeque,他们都实现了双端队列Deque接口,其中LinkedList使用链表实现了双端队列, ArrayDeque 使用数组实现双端队列。通常情况下,由于 ArrayDeque基于数组实现,拥有...原创 2014-10-15 16:04:08 · 197 阅读 · 0 评论 -
Java 锁分离
[size=medium] 读写锁思想的延伸就是锁分离。读写锁根据读写操作功能上的不同,进行了有效的锁分离。依据应用程序的功能特点,使用类似的分离思想,也可以对独占锁进行分离。一个典型的应用就是java.util.concurrent.LinkedBlockingQueue. 在LinkedBlockingQueue的实现中。take()和put()函数分别实现了从队列...原创 2014-10-16 15:35:56 · 597 阅读 · 0 评论 -
Java 重入锁(ReentrantLock)和内部锁(synchronized)
[size=medium] ReentrantLock 和 synchronize的 都是java 提供的锁机制,重入锁可以解决所有的内部锁的问题,那么问题来了,为什么还需要保持这两种锁同时存在呢。 首先确定一点,如果没有特殊要求,内部锁仍然是我们进行并发编程的首选。 在Jdk 1.5 之后,内部锁在性能上已经和重入锁相差不大。 但是重入锁提供了更为强大的功能...原创 2014-10-16 15:44:50 · 267 阅读 · 0 评论 -
Amino 框架简介
[size=medium] 对数据加锁是实现多线程的一种策略,但是加锁无疑会增加系统性能开销,如果处理不当会带来巨大损失。 及时使用一些无所算法,但仍然需要在应用层处理线程间的冲突问题,这无疑增加了应用程序的开发难度和算法的复杂度。为了解决这个问题,选择一些现成的无所并行框架就成了解决这个问题的好办法。 Amino 框架就是其中之一,他是apache下的一个分支项目,提...原创 2014-10-17 11:30:16 · 985 阅读 · 0 评论 -
4个线程,2个每次加1,两个每次减1
[code="java"]package threadTest;public class MultiThreadShareDemo { public static void main(String[] args) throws Exception { Data data = new Data(); Plus p = new Plus(data); Cu...原创 2014-09-01 23:44:21 · 149 阅读 · 0 评论 -
线程范围内的共享数据 ThreadLocal 分析与详解
Java 线程范围内的数据共享机制,需要解决的问题是 : 多个业务模块针对同一个static变量的操作 要保证在不同线程中 各模块操作的是自身对应的变量对象实例 A B 两个类 需要操作同一个static变量 data 初步代码 可能如下:[code="java"] package threadLocal;import java.util.Has...原创 2014-08-30 19:21:09 · 133 阅读 · 0 评论 -
java 竟态条件与临界区
[code="java"]竞态条件 & 临界区当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区,比如使多个线程操作的值增加1或减少1的操作方法就是一个临界区public void add(long value){ this.count = this.count + value; ...原创 2014-05-20 15:15:43 · 133 阅读 · 0 评论 -
java 多线程 原子操作(一)
对于一个集合 需要在加入之前 执行“先检查后执行”的步骤以达到“若没有则添加,若有则不添加”的目的,实行多线程以提高效率。[code="java"]@NotThreadSafepublic class ListHelper{ public List list = Collections.synchronizedList(new ArrayList());...原创 2014-05-20 19:30:59 · 185 阅读 · 0 评论 -
java 迭代大集合 思想
Java 操作数据量巨大的集合 或者 在每一个元素上执行操作的时间过长,这必将会影响到程序吞吐量,对于高并发程序来说是个灾难。为了避免这种线程阻塞的情况发生,也为了保证数据操作的安全性,比较好的做法是 在迭代期间对集合对象加锁,但是这种做法会造成线程阻塞,严重降低性能。 替代方案是 克隆容器。并在副本上进行迭代,由于副本被封闭在线程内,因此其他线程不会在迭代期间进行修改。(注:在克隆过程中仍...原创 2014-06-03 18:15:41 · 186 阅读 · 0 评论 -
java 高并发类--ConcurrentHashMap 特性浅析
[size=small] [code="java"]同步容器类在执行每个操作期间都持有一个锁。在一些操作中,例如 HashMap.get 或List.contains,可能包含大量的工作;当遍历散列桶或链表来查找某个特定的对象时,必须在许多元素上调用equals(equals本身还包含一定的计算量)。在基于散列的容器中,某些情况下,某个糟糕的散列函数还会把散列表变成现行链表。当遍历很长的链...原创 2014-06-04 14:12:28 · 110 阅读 · 0 评论 -
高并发服务器处理:高并发服务器的构建,不建议为每一个请求(任务)单独创建一个线程...
[code="java"]高并发服务器处理:高并发服务器的构建,不建议为每一个请求(任务)单独创建一个线程。因为无限制创建线程会产生一系列问题。 当创建大量线程时,1 线程生命周期的开销非常高。线程的创建鱼销毁并不是没有代价的,虽然会因为平台的不同而有所区别, 但是线程的创建都会需要时间,延迟处理的请求,并且需要JVM和操作系统提供一些辅助操作。 如果请求的到达率...原创 2014-07-08 16:07:43 · 255 阅读 · 0 评论 -
java 生产消费
[code="java"]package thread;public class ThreadTest { public static void main(String[] args) { Resource r = new Resource(); Producer p = new Producer(r); Consumer c = new Consumer...原创 2014-08-22 11:37:41 · 90 阅读 · 0 评论 -
jdk 5.0之后的生产者消费者
[code="java"]package threadJDK5;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreadTest...原创 2014-08-25 10:22:49 · 78 阅读 · 0 评论 -
jdk 5.0之后的生产者消费者 改进版
[code="java"]package threadJDK5;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreadTest...原创 2014-08-25 10:27:59 · 85 阅读 · 0 评论 -
jdk 5.0之后的生产者消费者 改进版(多生产多消费)
[code="java"]package threadJDK5;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreadTest...原创 2014-08-25 10:31:23 · 86 阅读 · 0 评论 -
jdk 5.0之前生产者消费者(基于指定大小集合操作)
[code="java"]package thread;import java.util.ArrayList;import java.util.List;public class ArrayListTest { public static final int Storge_Size = 100; public static void main(String[] ar...原创 2014-08-26 11:36:17 · 107 阅读 · 0 评论 -
jdk 5.0之后生产者消费者(基于指定大小集合操作)
[code="java"]package threadJDK5;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concu...原创 2014-08-26 12:12:12 · 105 阅读 · 0 评论 -
【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)...
[code="java"]转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313happen—before规则介绍 Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响...原创 2014-08-26 18:17:28 · 102 阅读 · 0 评论 -
java多线程之Semaphore信号量详解
[code="java"]原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ketqi.blog.51cto.com/1130608/1127274 信号量在操作系统中一般用来管理数量有限的资源.每类资源有一个对应的信号量.信号量的值表示资源的可用数量.在使用资源时,要先从该信号量上获取一个使用许可.成功获取许可之后,...原创 2014-08-27 13:35:21 · 89 阅读 · 0 评论 -
java 多线程操作数据库 及 静态bean注入
[code="java"]package com.robustel.rlink.device.service.impl;import java.util.ArrayList;import java.util.Collections;import java.util.Date;import java.util.List;import java.util.concurren...原创 2018-01-09 10:47:58 · 250 阅读 · 0 评论