java并发编程
文章平均质量分 89
longgangbai
这个作者很懒,什么都没留下…
展开
-
【转】Coherence Event Processing by using Map Trigger Feature
This article shows how to process Coherence events by using Map Triggers. Basically, Distributed Data Management in Oracle Coherence is suggested to look over basic configuration and implementation o...原创 2013-06-25 14:02:32 · 141 阅读 · 0 评论 -
java 中 ReentrantReadWriteLock的读锁和写锁的使用
jdk文档中关于ReentrantReadWriteLock类使用的一个很好的例子,以下是具体的介绍: 在使用某些种类的 Collection 时,可以使用 ReentrantReadWriteLock 来提高并发性。通常,在预期 collection很大,读取者线程访问它的次数多于写入者线程,并且 entail 操作的开销高于同步开销时,这很值得一试。例如,以下 是一个使用 TreeM...原创 2012-11-30 17:14:05 · 278 阅读 · 0 评论 -
java 多线程中Semaphore信号量
Semaphore信号量: 可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如实现一个文件允许的并发访问数。 获得一项前,每个线程必须从信号量获取许可(semaphore.acquire()),从而保证可以使用该项。该线程结束后,将项返回到池中并将许可返回到该信号量,从而允许其他线程获取该项。注意,调用 ac...原创 2012-11-30 15:39:29 · 101 阅读 · 0 评论 -
Java 文件锁的使用
多线程-内部锁、重进入 多线程 java提供了强制原子性的内部锁机制:synchronized块。一个synchronized块有两个部分:锁对象的引用和锁保护的代码块。synchronized方法上面的锁也分两种:对象锁和类锁。当该方法为static方法时,该方法获取到的锁为该Class对象锁。 重进入? 当某个线程进入A方法的时候获取...原创 2012-11-30 13:21:59 · 235 阅读 · 0 评论 -
【转】线程安全与锁优化
转载自http://xussen.iteye.com/blog/1677402 Brian Goetz对线程安全的定义:当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调度方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的 并发处理的广泛应用是使得Amdahl定律...原创 2012-11-29 16:17:41 · 90 阅读 · 0 评论 -
java synchronized静态同步方法与非静态同步方法,同步语句块
进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁。 对代码进行同步控制我们可以选择同步方法,也可以选择同步块,这两种方式各有优缺点,至于具体选择什么方式,就见仁见智了,同步块不仅可以更加精确的控制对象锁,也就是控制锁的作用域,何谓锁的作用域?锁的作用域就是从锁被获取到其被释放的时间。而且可以选择要获取哪个对象的对象锁。但是如果在使用同步块机制时,如果使...原创 2012-11-29 12:09:54 · 194 阅读 · 0 评论 -
java synchronized内置锁的可重入性和分析总结
最近在读<<Java并发编程实践>>,在第二章中线程安全中降到线程锁的重进入(Reentrancy) 当一个线程请求其它的线程已经占有的锁时,请求线程将被阻塞。然而内部锁是可重进入的,因此线程在试图获得它自己占用的锁是,请求会成功。重进入意味着请求是基于“每一个线程”,而不是基于“每一次调用”(互斥锁是基于每次调用的)。重进入的实现是通...原创 2012-11-28 17:01:27 · 171 阅读 · 0 评论 -
【转】volatile原理与技巧
转载请注明原文链接:http://kenwublog.com/the-theory-of-volatilevolatile原理与技巧volatile, 用更低的代价替代同步为什么 使用volatile比同步代价更低? 同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能.而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低...原创 2012-11-28 15:55:04 · 150 阅读 · 0 评论 -
java并发编程实践笔记
java并发编程实践笔记1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 final类型的c, 将共享变量的操作加上同步2, 一开始就将类设计成线程安全的 , 比在后期重新修复它 ,更容易 .3, 编写多线程程序 , 首先保证它是正确的 , 其次再考虑性能 .4, 无状态或只读对象永远是线程安全的 .5, 不要将一个共享变量裸露在多线程环境下...原创 2012-11-28 15:03:07 · 62 阅读 · 0 评论 -
【转】java并发编程-Executor框架
转载自 http://www.iteye.com/topic/366591 Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为: 并发编程的一种编程方式是把任务拆分为...原创 2012-11-28 13:20:47 · 94 阅读 · 0 评论 -
【转】Java 理论与实践: 流行的原子
转载:https://www.ibm.com/developerworks/cn/java/j-jtp11234/#1.0 十五年前,多处理器系统是高度专用系统,要花费数十万美元(大多数具有两个到四个处理器)。现在,多处理器系统很便宜,而且数量很多,几乎每个主要微处理器都内置了多处理支持,其中许多系统支持数十个或数百个处理器。 要使用多处理器系统的功能,通...原创 2012-11-28 09:46:06 · 71 阅读 · 0 评论 -
Java中原子操作类原则
java.util.concurrent.atomic 包中包括了原子变量( atomic variable )类,这些类用来实现数字和对象引用的原子状态的转换,把long类型的计数器替换成AtomicLong类型的,我们可以确保所有访问计数器状态的操作都是原子的,计数器是线程安全的了,而计数器的状态就是servlet的状态,所以我们的servlet再次车归纳为线程安全的了。...原创 2012-11-27 14:50:24 · 135 阅读 · 0 评论 -
java中 对共享可变数据的同步访问
对共享可变数据的同步访问 synchronized 关键字可以保证在同一个实践,只有一个线程在执行一条语句, 或者一段代码块。不同概念不仅包括互斥,而且包括一个对象被一个线程修改的时候, 可以阻止另一个线程观察到内部不一致的状态。 当对象被创建的时候处于一直的状态,当有方法访问他的时候他就被锁定了,这些方法 观察到对象的状态,并且可能会引起一个状态转变即把对...原创 2012-11-22 10:19:38 · 162 阅读 · 0 评论 -
【转】java线程阻塞中断和LockSupport的常见问题
转载自 http://www.iteye.com/topic/970055 上周五和周末,工作忙里偷闲,在看java cocurrent中也顺便再温故了一下Thread.interrupt和java 5之后的LockSupport的实现。 在介绍之前,先抛几个问题。 Thread.interrupt()方法和InterruptedException异常的关系?是由...原创 2012-12-03 13:30:51 · 166 阅读 · 0 评论 -
关于ThreadLocal分析和总结
什么是ThreadLocal? 首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal...原创 2012-12-03 15:56:25 · 106 阅读 · 0 评论 -
Hibernate延迟加载和OpenSessionInView
ThreadLocal<T>类在Spring,Hibernate等框架中起到了很大的作用.ThreadLocal类的使用虽然是用来解决多线程的问题的,但是还是有很明显的针对性.synchronized是用来处理多线程环境下的数据同步,而ThreadLocal只是为了保存当前线程私有的某种状态. 1.最明显的,ThreadLoacl变量的活动范围为某线程,并且我的...原创 2012-12-03 17:13:58 · 139 阅读 · 0 评论 -
【转】Distributed Data Management in Oracle Coherence
This article shows how to provide distributed(partitioned) data management by using Oracle Coherence. In below sample application, a new cluster named OTV has been created and a cache object nameduse...原创 2013-06-25 13:55:16 · 137 阅读 · 0 评论 -
【转】How to distribute Spring Beans by using Coherence
转载自: http://www.onlinetechvision.com/?p=425 This article shows how to distribute Spring beans by using Coherence. In below sample application, a new cluster named OTV ha...原创 2013-06-21 17:24:05 · 119 阅读 · 0 评论 -
关于H2使用的那些事
在项目中采用H2作为工作流的数据库,总结一下h2的使用;前言 :H2database是一款用java语言编写的开源数据库。 H2服务器下载下载地址: http://www.h2database.com/。 原文地址http://www.h2database.com/html/tutorial.html 下文前提是数据库已被解压安装完毕。 开启和使用H2控制台 H2Database支持通过浏览器...原创 2012-12-14 16:40:16 · 816 阅读 · 0 评论 -
【转】ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试官也因此发生了冲突,结果可想而知。还是...原创 2012-12-10 14:32:37 · 83 阅读 · 0 评论 -
【转】Java并发编程J.U.C之Condition
转载自http://www.goldendoc.org/2011/06/juc_condition/ 在上一篇中,我们了解了下锁的获取与释放的过程,这个过程主要通过在A.Q.S中维持一个等待队列来实现,其中我们也提到了,在A.Q.S中除了一个等待队列之外,还有一个Condition队列,在了解Condition队列之前,先来看一下Condition...原创 2012-12-10 13:14:06 · 121 阅读 · 0 评论 -
【转】Java并发编程J.U.C之锁的获取与释放
转载自 http://www.goldendoc.org/2011/06/lock_acquire_release/ 上一篇文章中,我们对J.U.C做了了解,在这一篇文章我们将来以ReentrantLock为例,来分析一下锁的获取和释放的过程,让大家能够对锁的获取和释放的整体过程有一个了解。一、锁的获取先看下ReentrantLock的lock(...原创 2012-12-10 13:07:30 · 84 阅读 · 0 评论 -
【转】JUC 基础内容概述
Concurrent Programming in Java 的作者 Doug Lea 编写了一个极其优秀的、免费的并发实用程序包,它包括并发应用程序的锁、互斥、队列、线程池、轻量级任务、有效的并发集合、原子的算术操作和其它基本构件。我们一般称这个包为 J.U.C。1. JUC概况以下是Java JUC包的主体结构:Atomic : AtomicIntegerLocks : ...原创 2012-12-10 13:01:51 · 280 阅读 · 0 评论 -
【转】Java并发编程之ConcurrentHashMap
ConcurrentHashMap ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。Concurren...原创 2012-12-10 12:56:40 · 136 阅读 · 0 评论 -
【转】单例模式完全解析
本文将探讨单例模式的各种情况,并给出相应的建议。 单例模式应该是设计模式中比较简单的一个,但是在多线程并发的环境下使用却是不那么简单了。首先看最原始的单例模式。1 package xylz.study.singleton;2 3 public class Singleton {4 5 private static Singleton instance = null;6 7 private...原创 2012-12-07 12:58:12 · 74 阅读 · 0 评论 -
【转】JAVA并发容器代码随读
转载自 http://rdc.taobao.com/team/jm/archives/539 队列类型的BlockingQueue和 ConcurrentLinkedQueue(生产者-消费者模型),Map类型的ConcurrentMap,Set类型的ConcurrentSkipListSet和 CopyOnWriteArraySet,List类型的CopyOnWriteArrayLi...原创 2012-12-06 15:29:44 · 96 阅读 · 0 评论 -
【转】Spring 事务管理高级应用难点剖析:
转载自 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts2/http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts3/概述 ...原创 2012-12-04 16:29:56 · 94 阅读 · 0 评论 -
【转】Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式
转载自 http://downpour.iteye.com/blog/1335991Struts2中的设计模式 设计模式(Design pattern)是经过程序员反复实践后形成的一套代码设计经验的总结。设计模式随着编程语言的发展,也由最初的“编程惯例”逐步发展成为被反复使用、并为绝大多数程序员所知晓的、完善的理论体系。我们使用设计模式(Design pattern)的初衷,是...原创 2012-12-04 15:11:29 · 203 阅读 · 0 评论 -
Java Thread的一点知识(III)
同步和异步有何异同,阻塞与非阻塞,在什么情况下分别使用他们?举例说明 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。同步就是指...原创 2011-10-28 15:32:49 · 77 阅读 · 0 评论 -
Java Thread的一点知识(II)
stop() 和 suspend() 方法为何不推荐使用? 反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,假如一个线程正在执行:synchronized void { x = 3; y = 4;} 由于方法是同步的,多个线程访问时总能保证x,y被同时赋值,而如果一个线程正在执行到...原创 2011-10-28 15:30:15 · 134 阅读 · 0 评论 -
Java Thread的一点知识
线程与进程的区别 线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是和它所属的进程内的其他线程共享一个存储空间。线程的使用可以使我们能够并行地处理一些事情。线程通过并行的处理给用户带来更好的使...原创 2011-10-28 15:24:03 · 88 阅读 · 0 评论 -
分析一下为什么Java不支持泛型类型的数组
分析一下为什么Java不支持泛型类型的数组 sean的这篇文章大部分是对的,但是到最后的结论部分“想想看,我们本来定义的是装Map<Integer, String>的数组,结果我们却可以往里面放任何Map,接下来如果有代码试图按原有的定义去取值,后果是什么不言自明。”,我觉得可以讨论讨论。其实,sean的文中也提到,Java对泛型的支持其实就是在编译器中做了做...原创 2009-12-05 15:02:10 · 261 阅读 · 0 评论 -
防止Myeclipse6.5的保存换行格式化的另一种解决方案
不同Myeclipse可能的设置步骤不一样,但是设置的策略大致一样。 在Myeclipse中采用格式化文件必须自己写,本来一行可以写完的代码自动格式化形成了两三行代码,是在不雅。本想自定义格式化文件,但是没用用过,所以采用另一种解决方案,将每一行的字节数放大即可。解决。 java ---Code Template --在active profile中点击edit ,弹出...2009-12-05 10:49:42 · 82 阅读 · 0 评论 -
在 JDK 1.4 中打印
从版本 1.1 以后,好像 Java 平台的每个新发行版都更改了平台的打印支持框架。Merlin 也不例外。在这个月的 Merlin 的魔力中,John Zukowski 开始分两部分对最新功能进行讨论。请单击文章顶部或底部的 讨论在 讨论论坛与作者和其他读者分享您对本文的心得。 <!--START RESERVED FOR FUTURE USE INCLUDE FILES-->&...原创 2009-12-01 13:18:33 · 158 阅读 · 0 评论 -
Java 5 的语言特性
Java™ 5 添加了许多强大的语言特性:泛型、枚举、注释、自动装箱和增强的 for 循环。Java 5 语言特性的实现 Java 5 中添加的语言特性 —— 泛型、枚举、注释、自动装箱和增强的 for 循环 —— 不需要修改 JVM 的指令集,几乎全部是在静态编译器(javac)和类库中实现的。当编译器遇到使用泛型的情况时,会试图检查是否保证了类型安全(如果不能检...2009-11-17 13:57:15 · 117 阅读 · 0 评论 -
java 中时间Date和Calendar中获取时间时必须注意几点
时间Date和Calendar中获取时间的不同部分可以方法不同,但是有时获取的时间部分也不一样,所以建议采用Calendar获取时间。遇有Date中获取年份等方法过期,已经废除,所以必须转换Calendar。 简单转换:Date date = new Date(); Calendar calendar = Calendar.getInstance(); ca...2009-11-15 16:51:22 · 99 阅读 · 0 评论 -
Java SE 6(JDK1.6)的十大新技术亮点
Danny Coward在他的博客中列出了Java SE 6的十大新功能,同时也是他认为你应该升级到Java SE 6上的十大原因。这十大看点以次是: 1.性能和质量: Java 6 同Java 5不一样,没有新的语言特征,是一个以稳定、提高为目的的版本。Java 6不论是服务器端还是客户端版本都有了两位数百分比的提高,根据领域的不同Java 6性能提高了20%-40%,详细内容见前一...2009-05-06 11:57:21 · 101 阅读 · 0 评论 -
java JVM
jvm是jre里头一个动态连接函数库,jdk里面的jre一般用于运行java本身的程序,比如javac,等等.programfiles下面的jre用于运行用户编写的java程序. JRE下的bin\client 或者 bin\server 的jvm.dll就是JVM了 当一台机器上有多个jvm可选择的时候,jvm的选择步骤: 1)当前目录有没有jre目录(不准确), 2)父目录下的...2009-03-27 23:52:27 · 80 阅读 · 0 评论 -
java 垃圾自动回收
Java虚拟机的一个强大之处在于其提供垃圾自动回收,对开发人员掩盖了内存分配和回收的细节。本篇将探索JVM的内存分配和垃圾回收机制,以在内存分析实战中提供一些理论和实践参考。 1. 从理论开始 1.1.垃圾检测 任何虚拟机的回收算法都包括两个步骤:检测垃圾和回收垃圾。当一个对象被创建时,其是活动的对象,此时其是可用的,而在运行过程中,该对象的引用不再被使用,这时该对象就成为垃圾...原创 2009-03-27 23:49:05 · 301 阅读 · 0 评论 -
深入类别载入器
1,静态初始块是在类别第一次实体化的时候才被呼叫那仅仅一次 不管使用的是new来产生类别的实体,或是只有一个参数的forname()方法,内部都隐含了 “再如类别+呼叫静态初始化区块”的动作,而使用具有3个参数的forname(),方法时,如 第二个参数设定为false,那么就只命令类别载入器载入该类别,但不会叫用其静态初始化 区块,只有等到整个程式第一次实体化某个类别...2009-03-27 23:47:56 · 92 阅读 · 0 评论