线程-并发
kjfcpua
这个作者很懒,什么都没留下…
展开
-
Java 理论与实践: 并发在一定程度上使一切变得简单
简介: 对于每个项目,象许多其它应用程序基础结构服务一样,通常无需从头重新编写并发实用程序类(如工作队列和线程池)。这个月,Brian Goetz 将介绍 Doug Lea 的util.concurrent 包,这是一个高质量的、广泛使用的、并发实用程序的开放源码包。可以通过本文的 论坛提出您对本文的想法,以飨笔者和其他读者。当项目中需要 XML 解析器、文本索引程序和搜索引擎转载 2012-02-23 22:01:34 · 914 阅读 · 0 评论 -
java线程技术2_线程的创建运行终止
1.创建和运行线程在Java中,多线程的实现有两种方式: 扩展java.lang.Thread类 实现java.lang.Runnable接口(1)扩展Thread类 Thread Test = new Thread(); Test.start();(2)实现Runnable接口将实现Runnable接口的类实例化转载 2013-03-01 21:24:06 · 535 阅读 · 0 评论 -
java线程技术3_线程的同步
Thread类中的join方法的功能就是使异步执行的线程变成同步执行。 thread.join()应该是让其它线程进入阻塞状态,等当前的thread执行完之后,才允许其它线程执行 。例:/** * 线程的join举例. * @version V1.0 ,2011-4-1 * @author xiahui */public转载 2013-03-01 21:24:33 · 488 阅读 · 0 评论 -
java线程技术4_Volatile
1.Volatile产生原因 Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在转载 2013-03-01 21:25:03 · 490 阅读 · 0 评论 -
java线程技术5_synchronized
1.概述 从《java线程技术4_Volatile 》知道,Volatile只能解决多线程情况下共享变量的一致性问题,而解决不了共享数据操作的原子性问题。如下例/** * 共享变量的并发错误问题. * @version V1.0 ,2011-4-4 * @author xiahui */public class DutyDat转载 2013-03-01 21:25:41 · 440 阅读 · 0 评论 -
反驳:Threadlocal存在内存泄露
最近看到网上的一篇文章,分析说明ThreadLocal是如何内存泄露的. 但我不这么认为. ThreadLocal设计的很好,根本不存在内存泄露问题. 本文就结合图和代码的例子来验证我的看法.网上的代码例子普遍是这样子的:01public class Test {02 public stati转载 2013-03-14 09:40:10 · 1647 阅读 · 0 评论 -
深入ThreadLocal的内部机制
早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本。ThreadLoca转载 2013-03-14 09:41:34 · 1009 阅读 · 0 评论 -
java线程技术1_入门
1.线程概述 线程是程序运行的基本执行单元。一个进程至少有一个线程(主线程),作为程序的入口点。 一个线程可以等待另一个线程的处理结果 线程之间可以共享内存 各个拥有一个属于自己的内存空间(线程栈), 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。2.线程的常用事例(1)GUI开发转载 2013-03-01 21:23:33 · 408 阅读 · 0 评论 -
java线程技术6_线程的挂起和唤醒
1. 线程的挂起和唤醒 挂起实际上是让线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行;在线程挂起后,可以通过重新唤醒线程来使之恢复运行。挂起的原因可能是如下几种情况: (1)通过调用sleep()方法使线程进入休眠状态,线程在指定时间内不会运行。 (2)通过调用join()方法使线程挂起,使自己转载 2013-03-01 21:26:10 · 1246 阅读 · 0 评论 -
彻底理解ThreadLocal
知其然synchronized这类线程同步的机制可以解决多线程并发问题,在这种解决方案下,多个线程访问到的,都是同一份变量的内容。为了防止在多线程访问的过程中,可能会出现的并发错误。不得不对多个线程的访问进行同步,这样也就意味着,多个线程必须先后对变量的值进行访问或者修改,这是一种以延长访问时间来换取线程安全性的策略。而ThreadLocal类为每一个线程都维护了自己独有的变量拷贝转载 2013-03-14 09:40:53 · 2726 阅读 · 0 评论 -
Java线程join()方法的用处
run() 和start() 是大家都很熟悉的两个方法。把希望并行处理的代码都放在run() 中;stat() 用于自动调用run(),这是JAVA的内在机制规定的。并且run() 的访问控制符必须是public,返回值必须是void(这种说法不准确,run() 没有返回值),run()不带参数。闲话少说,我们要讲的是join(),我们首先来看个例子:转载 2013-08-07 14:19:49 · 710 阅读 · 0 评论 -
详细分析Java中断机制
1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。如果对Java中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出转载 2013-08-07 10:21:12 · 885 阅读 · 0 评论 -
深入JVM锁机制1-synchronized
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令转载 2013-08-30 16:15:35 · 746 阅读 · 0 评论 -
深入JVM锁机制2-Lock
前文(深入JVM锁机制-synchronized)分析了JVM中的synchronized实现,本文继续分析JVM中的另一种锁Lock的实现。与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实转载 2013-08-30 16:18:00 · 802 阅读 · 0 评论 -
正确使用volatile
volatile仅仅能保证变量可见性, 无法保证原子性.如n=n+1、n++等,volatile关键字将失效1.volatile可用于状态标志.boolean类型2.一次性发布public class BackgroundFloobleLoader { public volatile Flooble theFlooble; //此处构造时原创 2013-09-10 17:27:15 · 1037 阅读 · 0 评论 -
进程与线程的一个简单解释
最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。3.进程就好比工厂的转载 2013-09-23 15:17:53 · 926 阅读 · 0 评论 -
Java多线程发展简史
这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并且提及一些在多线程编程方面常见的问题。对于Java程序员来说,如果从历史的角度去了解一门语言一个特性的演进,或许能有不同收获。 引言首先问这样一个问题,如果提到Java多线程编转载 2013-09-23 11:09:21 · 1150 阅读 · 0 评论 -
java线程技术7_线程中断
1.中断概述 在多线程编程中经常会遇到需要中止线程的情况,比如启动多个线程去数据库中搜索,如果有一个线程返回了结果,其他线程就可以取消了。中断线程的三个相差函数 1.通过成员方法Thread.interrupt()来设置中断状态为true 2.通过成员方法Thread.isInterrupted()来获取中断状态转载 2013-03-01 21:19:17 · 581 阅读 · 0 评论 -
【解惑】 中断线程Interrupted的用处
★ 线程状态 Java虚拟机将线程运行过程分成四种状态 。 (1) New 新生;(2) Runnable 可运行;(3) Blocked 阻塞;(4) Dead 死亡。 值得注意的是: 线程的可运行状态并不代表线程一定在运行(runnable != running ) 。 大家都知道:所有现代桌面和服务器操作系统都使用了抢占式的线程调度策略 。一旦线程开始转载 2013-01-20 20:02:41 · 1918 阅读 · 0 评论 -
java.util.concurrent-------TimeUnit
java.util.concurrent并发库是JDK1.5新增的,其作者是Doug Lea ,此人是个BOSS级别的天才人物了.有了他提供的类库,使得我们对多线程并发、锁有了很大的帮助,减少了并发难度、并且相对应java本身的synchronized同步有了很大的性能提升.readLock、writeLock使得控制的力度更小、更精确。 TimeUnit是一个枚举类型,可以将时间方便快捷的转转载 2012-02-23 21:36:22 · 12825 阅读 · 0 评论 -
关于 java.util.concurrent 您不知道的 5 件事,第 1 部分
简介: 编写能够良好执行,防止应用程序受损的多线程代码是很艰巨的任务 — 这也是为什么我们需要 java.util.concurrent 的原因。Ted Neward 会向您说明并发 Collections 类,比如CopyOnWriteArrayList,BlockingQueue,还有 ConcurrentMap,如何针对您的并发编程需求改进标准 Collections 类。转载 2012-02-23 22:10:15 · 841 阅读 · 0 评论 -
关于 java.util.concurrent 您不知道的 5 件事,第 2 部分
简介: 除了具有很好的并发性的 Collections,java.util.concurrent 还引入了其他一些预先构建的组件,它们可帮助您调整和执行多线程应用程序中的线程。Ted Neward 介绍在 Java™ 编程过程中使用 java.util.concurrent 包要注意的 5 点。并发 Collections 提供了线程安全、经过良好调优的数据结构,简化了并发转载 2012-02-23 22:11:25 · 843 阅读 · 0 评论 -
ThreadPoolExecutor
在多线程大师Doug Lea的贡献下,在JDK1.5中加入了许多对并发特性的支持,例如:线程池。一、简介线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeU转载 2012-02-24 13:16:56 · 861 阅读 · 0 评论 -
Java 理论与实践: 并发集合类
简介: DougLea的 util.concurrent 包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型 List 和 Map 的高性能的、线程安全的实现。在本月的 Java理论与实践中,BrianGoetz向您展示了用 ConcurrentHashMap 替换 Hashtable 或 synchronizedMap ,将有多少并发程序获益。您可以在本文的 论坛中与作者以及其他读转载 2012-02-23 22:02:19 · 526 阅读 · 0 评论 -
java.util.concurrent介绍
java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。如果一些类名看起来相似,可能是因为 java.util.concu转载 2012-02-23 22:30:50 · 11251 阅读 · 1 评论 -
关于多线程编程您不知道的 5 件事
简介: 多线程编程向来不容易,但是它确实有助于理解 JVM 进程如何巧妙地构建不同代码。Steven Haines 分享 5 个技巧,可以帮助您在使用同步方法、volatile 变量和原子类时做出更明智的决策。虽然很少有 Java™ 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程。相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和转载 2012-02-23 22:54:13 · 719 阅读 · 0 评论 -
java.util.concurrent
java.util.concurrent 是在并发编程中很常用的实用工具类。此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类,没有这些类,这些功能会很难实现或实现起来冗长乏味。下面简要描述主要的组件。另请参阅 locks 和 atomic 包。执行程序 接口Executor 是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异转载 2012-02-23 22:56:00 · 517 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier的区别
在网上看到很多人对于CountDownLatch和CyclicBarrier的区别简单理解为CountDownLatch是一次性的,而CyclicBarrier在调用reset之后还可以继续使用。那如果只是这么简单的话,我觉得CyclicBarrier简单命名为ResetableCountDownLatch好了,显然不是的。我的理解是,要从他们的设计目的去看这两个类。javadoc里面的描述是转载 2012-02-27 22:51:32 · 22619 阅读 · 8 评论 -
深入分析Volatile的实现原理
引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通转载 2012-03-11 18:47:57 · 621 阅读 · 0 评论 -
消灭神出鬼没的Heisenbug
Webster最常用的词汇列表上可能并没有术语“Heisenbug”。但不幸的是,作为软件工程师,我们对这个可恶的家伙是再熟悉不过的了。量子物理学里有个海森堡不确定性原理(Heisenberg Uncertainty Principle),认为观测者观测粒子的行为会影响观测结果,术语“Heisenbug”是海森堡不确定性原理的双关语,指生产环境下不经意出现、费尽九牛二虎之力却无法重现的计算机Bug转载 2012-10-29 17:39:50 · 4912 阅读 · 0 评论 -
关于actor模型的优缺点分析(1)
actor model是1973年就提出的一个分布式并发编程模型,在erlang语言中得到广泛支持和应用。目前java中也出现了很多支持actor模型的库:akka、killim、jetlang等等,其中akka是使用scala写的,有scala和java两套使用接口;killim需要对编译出来的class文件进行后处理。 最近项目需要架构整改,以支撑后续的发展,正在考虑是否采用a转载 2012-11-05 10:40:09 · 17051 阅读 · 0 评论 -
Actor模式的Java实现 JActor
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。示例代码:JAMailboxFactory mailboxFactory = JAMailboxFactory.newMailboxFactory(1);try { Mailbox转载 2012-11-05 10:41:13 · 9983 阅读 · 0 评论 -
Kilim:actor模型和消息传递的Java实现
正像在“多核危机:Scala vs. Erlang”一文中所讲的,面对当前、尤其是未来的多CPU,需要大量的并行性计算,那么并发的消息传递和actor模型将成为一种很有希望的解决之道。这些机制在Erlang中是完全内置的,Scala的框架中则包含了Scala Actor库。在Java的世界中,同样也存在一个纯Java的实现——Kilim。Kilim是一个Java消息传递框架,它提供了超转载 2012-11-05 10:41:40 · 2377 阅读 · 0 评论 -
深入浅出 Java Concurrency
http://blog.sina.com.cn/s/blog_64d0b03c0101azhu.htmlhttp://www.blogjava.net/xylz/category/45607.htmlhttp://www.javaconcurrencyinpractice.com/http://www.ibm.com/developerworks转载 2012-11-05 16:53:42 · 1148 阅读 · 0 评论 -
Thread.sleep 四种标示方式
Thread.sleep(10000)Thread.sleep(TimeUnit.MILLISECONDS.convert(10, TimeUnit.SECONDS)Thread.sleep(TimeUnit.SECONDS.toMillis(10))TimeUnit.SECONDS.sleep(10)转载 2012-12-25 10:50:19 · 1139 阅读 · 0 评论 -
风格之争:Coroutine模型 vs 非阻塞/异步IO(callback)
我们在设计一个服务器的软件架构的时候,通常会考虑几种架构:多进程,多线程,非阻塞/异步IO(callback) 以及Coroutine模型。多进程这种模型在linux下面的服务程序广泛采用,比如大名鼎鼎的apache。主进程负责监听和管理连接,而具体的业务处理都会交给子进程来处理。这里有一篇我以前写的文章具体的解释这种架构的实现。这种架构的最大的好处是隔离性,子进程万一cras转载 2013-11-13 10:22:07 · 7191 阅读 · 0 评论