Concurrent Programming
booboo2006
I am a Java software engineer.
展开
-
Servlet及JSP中的多线程同步问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随转载 2008-08-04 14:39:00 · 430 阅读 · 0 评论 -
Java 理论与实践: 流行的原子
在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待、无锁定的算法。在java.util.concurrent 中添加原子变量类之后,这种情况发生了变化。请跟随并行专家 Brian Goetz一起,了解这些新类如何使用 Java 语言开发高度可伸缩的无阻塞算法。您可以在本文的 论坛中与作者或其他读者共享您对本文的看法。(也可以通过单击文章顶部或者底部的转载 2008-10-13 16:46:00 · 594 阅读 · 0 评论 -
Java并发编程基础知识片段
Java5并发包的加入,给Java的并发程序的开发带来了很多的好处,在此列举一些并发编程中应该掌握的一些基础知识片断,这些片断基本都是由一些问题组成,在片段中没有直接写出答案,由于可用来解决这些片段的方法还是很多的,因此只是提到了解决问题可选方案的关键字,如果有需要进一步了解的话,基本上google一下应该就能查出来了,不过就像之前有朋友说的,如果不是经常用的话,其实就算现在知道了也是转载 2008-10-14 09:28:00 · 495 阅读 · 0 评论 -
浅谈java.util.concurrent包的并发处理
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发转载 2008-11-06 17:31:00 · 993 阅读 · 0 评论 -
深入浅出Java多线程(1)-方法 join
对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于Java语言的产品。本文将深入浅出的表述Java多线程的知识点,在后续的系列里将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实现与应用。 如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看。所以该系列基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问转载 2008-11-06 17:37:00 · 1068 阅读 · 0 评论 -
深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现
在多线程交互的中,经常有一个线程需要得到另个一线程的计算结果,我们常用的是Future异步模式来加以解决。 什么是Future模式呢?Future顾名思义,在金融行业叫期权,市场上有看跌期权和看涨期权,你可以在现在(比如九月份)购买年底(十二月)的石油,假如你买的是看涨期权,那么如果石油真的涨了,你也可以在十二月份依照九月份商定的价格购买。扯远了,Future就是你可以拿到未转载 2008-11-06 17:35:00 · 858 阅读 · 0 评论 -
深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)
本文主要解决的问题是:如何使其Swing程序只能运行一个实例?抛开Swing, 我们的程序是通过java命令行启动一个进程来执行的,该问题也就是说要保证这个进程的唯一性,当然如果能够访问系统的接口,得到进程的信息来判断是否已有进程正在运行,不就解决了吗?但是如何访问系统的接口呢?如何要保证在不同的平台上都是OK的呢?我的思路是用文件锁,当然我相信肯定有更好的方法,呵呵,希望读者能够转载 2008-11-06 17:36:00 · 1140 阅读 · 0 评论 -
深入浅出多线程(4)对CachedThreadPool OutOfMemoryError问题的一些想法
线程池是Conncurrent包提供给我们的一个重要的礼物。使得我们没有必要维护自个实现的心里很没底的线程池了。但如何充分利用好这些线程池来加快我们开发与测试效率呢?当然是知己知彼。本系列就说说对CachedThreadPool使用的一下问题。 下面是对CachedThreadPool的一个测试,程序有问题吗?Code highlighting produced by转载 2008-11-10 14:56:00 · 4777 阅读 · 0 评论 -
深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
线程对象的创建和销毁是需要花费系统资源的,通过线程池,可以避免该问题并提高系统的响应时间。这种情形类似我们常提到的数据库连接池。 线程池的广泛应用使得在SUN在JDK1.5的工具包提供了线程池的支持。我计划将该系列分为设计需求与设计实现两个部分。这样会更加清晰。如果想要熟悉,并熟练应用线程池,那么通过设计需求篇也就是该篇就可以找到答案。如果想探究实现的细节,那么在设计实转载 2008-11-10 14:57:00 · 1193 阅读 · 0 评论 -
深入浅出多线程(6)分析并行包线程池的设计与实现
在上篇中介绍了线程池的设计需求以及使用,在这里我们分析Concurrent包中线程池的实现类ThreadPoolExecutor的设计,是不是感觉没意义,人家都实现了还分析啥?当然是提高我们自身的设计能力了。对于设计能力的提高,我认为一方面我们要在具体实践中,能够学习前人总结的设计思想(比如设计模式之类的),根据具体上下文,能够融会贯通的使用他们。另一方面分析优秀的框架设计与实现也是很好的转载 2008-11-10 14:58:00 · 944 阅读 · 0 评论 -
多线程Java Socket编程示例
这篇做为学习孙卫琴>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.1.服务端package sterning;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;转载 2008-12-02 13:15:00 · 616 阅读 · 0 评论 -
Java5 并发学习
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run方法即可。转载 2009-12-15 17:21:00 · 929 阅读 · 0 评论 -
CyclicBarrier And CountDownLatch Tutorial
CyclicBarrier使所有线程相互等待,而CountDownLatch使一个或多个线程等待其他线程。转载 2010-07-21 15:23:00 · 1100 阅读 · 0 评论 -
Java同步机制浅谈 synchronized对代码作何影响?
Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量转载 2008-08-07 16:57:00 · 566 阅读 · 0 评论 -
Java 理论与实践: 线程池与工作队列
贴在我们多线程 Java 编程论坛上最常见的问题之一是“怎样创建线程池?”。几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。 为什么要用线程池? 诸如 Web服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都转载 2008-08-05 14:34:00 · 705 阅读 · 0 评论 -
深入研究Servlet线程安全性问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。 Ser转载 2008-08-04 14:44:00 · 399 阅读 · 0 评论 -
关于servlet线程安全问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。转载 2008-08-04 14:41:00 · 601 阅读 · 0 评论 -
JDK 5.0中的并发-----整理自IBM-900
概述:JDK 5.0 是用 Java 语言创建高可伸缩的并发应用程序的主要步骤。JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语(synchronized、wait() 和 notify())相比较,说明这些类如何提高了可伸缩性。 虽然本文档针对于各个转载 2008-08-05 13:19:00 · 1362 阅读 · 0 评论 -
线程高级---异步线程
异步线程是多线程编程中比较重要的编程方法。记得编写过.net的socket,提供的编程模式与传统的多线程socket编程方式不同,很长时间也没搞清楚,的确,单凭异步这个词去理解它是稍微难了些。不妨再次使用这个socket做例子来解释异步线程。 我需要做的是编写一个服务器,接受多个客户端的请求并根据需要返回数据。.net的socket是这样来做的:首先,起一个线程listene转载 2008-08-05 14:31:00 · 12987 阅读 · 0 评论 -
线程高级---线程的一些编程技巧
对于线程的编程,同步已经不在算什么技巧了,而是基础。所以在阅读本篇之前,希望对同步有很深刻的认识。而本篇是朝着技巧来的,将会在今后的阐述中以此为主线将一些简单但常见的线程编程问题解释一下。 1.提高性能的技巧。 这里主要介绍几个提高性能的多线程编程技巧,适当的使用它们将会让多线程程序快很多。 1)在阐述之前,先看看s转载 2008-08-05 14:32:00 · 1194 阅读 · 0 评论 -
jdk concurrent threadPool---ThreadPoolExecutor原理分析
线程池 线程池是管理线程的高级技术,通常它提供了如下功能: 通过对线程的管理,更加合理的调配资源。通常,线程池里维护着一组空闲线程,并向外提供,根据系统繁忙程度动态增加或减少空闲线程的数量。比较高级的还提供了自动检测异常线程的功能。 通过维护池中既存线程,可以节省创建线程的开销,尤其是对于webserver这类处理频繁,而处理过程又比较快的程序,创建线程的开销是转载 2008-08-05 14:33:00 · 4508 阅读 · 0 评论 -
JAVA API备忘----Thread
JAVA的线程是一个既简单又复杂的概念。说它简单,是因为JAVA在语言级就内置了线程,使得线程的编程相对其它语言来说要简单得多;另一方面,线程编程本身就很复杂,无论再怎么去简化,总离不开并发、通信等概念,而这些东西就有复杂性。 JAVA线程编程涉及的变化比较多,但是总结下来,基本上都是对基础知识的深入应用。本文不打算介绍每本书都必写的东西,而是试图强调一些比较重要而又需要深入理解的基础概转载 2008-08-05 14:41:00 · 933 阅读 · 0 评论 -
jdk concurrent collection---ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开转载 2008-08-05 13:08:00 · 859 阅读 · 0 评论 -
jdk concurrent collection---ConcurrentLinkedQueue原理分析
先来回顾之前提到过的ConcurrentHashMap,它是一个以Concurrent开头的并发集合类,其原理是通过增加锁和细化锁的粒度来提高并发度。 另一个值得一提的Concurrent是ConcurrentLinkedQueue。这个类采用了另一种提高并发度的方式:非阻塞算法(Non-blocking),第一次实现了无锁的并发。 谈到这里,先要介绍一下非阻塞算法。其实非阻塞算转载 2008-08-05 14:21:00 · 1280 阅读 · 0 评论 -
线程高级---生产者消费者问题
说到生产者消费者问题,大部分人都不会陌生,OS课的经典问题,并且其本身就是一个计算机编程中常见的问题。可以说既是难点又是重点。对于它的应用,可以举出无数的例子,小到一个多线程程序对队列的共享互斥操作,大到目前流行的中间件产品,诸如BEA的BMQ(BEAMessage Queue),IBM的MQSerious等中间件就是将生产者消费者问题应用通用化体系化的结果。 在开始之前转载 2008-08-05 14:25:00 · 1129 阅读 · 0 评论 -
线程高级---读写锁
读写锁问题也是比较常见的问题,这是因为现实中充斥着这类问题,而读者写者问题是单纯synchronized的进化版,之所以这么说,是因为它将锁分为读锁和写锁,通过读锁之间的并发性和写锁的排他性从而极大的提升性能。 在开始之前,还是先来回顾一下读写锁问题。一个数据文件或记录能被多个线程共享。有些线程要求读,而另一些则要求写或修改。允许多个读线程同时读一个共享对象,因为读操作不会使数据转载 2008-08-05 14:30:00 · 2958 阅读 · 0 评论 -
Java 理论与实践: 并发集合类
在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。 Hash转载 2008-08-05 18:47:00 · 425 阅读 · 0 评论 -
Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用转载 2010-12-01 22:56:00 · 757 阅读 · 0 评论