多线程编程相关
文章平均质量分 80
axman
有寂寞陪着,我就不会寂寞。
展开
-
多线程编程 基础篇 (三)
基础篇(三) 线程对象的几个重要的方法尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的.本来打算用一节的篇幅来把线程方法中一些重要的知识说完,但这样下来估计要很常的篇幅,可能要用好几节才能说把和线程方法相关的一些重要的知识说完.首先我们接基础篇(二)来说明start()方法.一个线程对象生成后,如果要产生一个执行的线程,就一定要调用它的start()方原创 2005-07-22 12:07:00 · 29342 阅读 · 5 评论 -
多线程编程 实战篇 (一)
实战篇(一) 在进入实战篇以前,我们简单说一下多线程编程的一般原则.[安全性]是多线程编程的首要原则,如果两个以上的线程访问同一对象时,一个线程会损坏另一个线程的数据,这就是违反了安全性原则,这样的程序是不能进入实际应用的.安全性的保证可以通过设计安全的类和程序员的手工控制.如果多个线程对同一对象访问不会危及安全性,这样的类就是线程安全的类,在JAVA中比如String类就被设计为线程安全的类.而原创 2005-07-22 12:11:00 · 30590 阅读 · 10 评论 -
多线程编程 实战篇 (二)
实战篇(二) 本节继续上一节的讨论.[一个线程在进入对象的休息室(调用该对象的wait()方法)后会释放对该对象的锁],基于这个原因.在同步中,除非必要,否则你不应用使用Thread.sleep(long l)方法,因为sleep方法并不释放对象的锁.这是一个极其恶劣的品德,你自己什么事也不干,进入sleep状态,却抓住竞争对象的监视锁不让其它需要该对象监视锁的线程运行,简单说是极端自私的一种行为原创 2005-07-22 12:13:00 · 4859 阅读 · 7 评论 -
多线程编程 实战篇 (三)
[深入了解线程对象与线程,线程与运行环境]在基础篇中的第一节,我就强调过,要了解多线程编程,首要的两个概念就是线程对象和线程.现在我们来深入理解线程对象,线程,运行环境之间的关系,弄清Runnable与Thread的作用. 在JAVA平台中,序列化机制是一个非常重要的机制,如果不能理解并熟练应用序列化机制,你就不能称得一个java程序员. 在JAVA平台中,为什么有些对象中可序列化的,原创 2005-08-01 11:10:00 · 4794 阅读 · 3 评论 -
多线程编程 实战篇秘籍 (一)
实战篇秘籍 (一) 本来这几节的内容想拿出来单独放在秘籍篇中.但由于我在实战篇五的结尾处说:关于这个例子仍然还有很多可说的内容,所以经由这句话所引出的秘籍篇,作为实战篇的继续,就叫它实战秘籍.在实战篇五中,有两个非常关键的重点需要在原创 2006-03-13 09:23:00 · 3909 阅读 · 4 评论 -
多线程编程 实战篇秘籍 (二)
volatile 变量volatile 是用来保证[内存同步]的关键字,内存同步是说在某个线程中修改某实例字段能够及时地更新到主存储区,而某线程如果需要引用该字段也能及时地从主存储区中得到最新的数据.简单说它是当前线程的工作存储区和主存储区对某字段的及时同步,所以我们说它是[内存同步],但它不是线程同步.也就是说,一个线程对 volatile字段进行更新时,它只会把更新后的值及时地同步到主存储区,原创 2006-08-14 14:34:00 · 3500 阅读 · 1 评论 -
Java 多线程编程中的设计模式 开篇
什么是模式?有太多的介绍模式的书,似乎用不着我再来给模式下一个定义.正如什么是道?除了老子有权解释,其他任何试图向别人解释什么是道的人,其实根本就不懂道!更别说什么初论,再论,三论,x论,末流之论也.你不论说明你还懂一些,如果你论,说明你根本就不懂道.因为老子已经说得非常清楚:道可道,非常道!那么我们是否已经陷入了不可知论?非也.不可道之道,是真正的大道.大道虽然无形,但每个人对它的感受是有形有原创 2006-08-23 10:00:00 · 4837 阅读 · 5 评论 -
多线程编程的设计模式 不变模式(一)
多线程编程的设计模式 不变模式(一)虽然这个模式的名称已经有人介绍过,但我仍然要以我的方式来介绍它,因为我对这个模式要说的东西比现有的我所能看到的介绍更全面更深入. 一.不变模式需要的基础.模式虽然显得高深,但学习它的难度很低,即使你只是一个中级水平的程度员,也可以在很短的时候学会一个模式(当然要能正确地运用那需要丰富的经验积累).对于基础知识的深入才是一个优秀的程序员所具备有必要条件. 我下原创 2006-09-29 10:14:00 · 3658 阅读 · 4 评论 -
.NET并行库测试实例
.NET并行库测试实例并行库存应用场景: 并行计算首要目的是提高CPU的计算能力,简单说程序应该是以CPU密集型运算为主的,如果你的程序是IO(磁盘和网络)密集型运算,并行计算并不能对你的程序有多大的提高。有时反而会有影响。我们还是以事实来说话:namespace ParallelTest{ static class Program { static void Compu原创 2009-03-04 20:31:00 · 2199 阅读 · 1 评论 -
JOIN的线程谁来唤醒
JOIN的线程谁来唤醒这个问题在CSDN上被问到,我做了详细的回答。但提问者的水平不同,对正确答案的判断能力也不同,所他并没有满意我的回答。我之所以专门再为此写一篇文章,是从这个问题要引出话题还是应该要阐明的。1.join做了什么? 打开jdk的源码,可以看到join其实就是在等待目标线程的结束: public final synchronized void join(long millis原创 2009-03-13 11:37:00 · 5277 阅读 · 7 评论 -
多线程编程 基础篇 (一)
基础篇 (一)[写在前面] 随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型是目前计算机系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最高为4G.事实上目前3.6G主频的CPU已经接近了顶峰. 如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么继续提高CPU性能的方法就是超线程CPU模式.原创 2005-07-11 13:50:00 · 59538 阅读 · 9 评论 -
多线程编程的设计模式 临界区模式(三)
[高级主题:关于synchronized]其实在多线程编程基础部分,我已经谈过synchronized相关的内容.但临界区模式是其它多线程编程模式的基础,所以在这里继续深入一下谈谈synchronized相关的一些内容.只要见到synchronized关键字,第一要想到的问题就是,synchronized在保护谁?在上面的例子中,synchronized保护的是Corrie对象的counter,n原创 2006-09-07 12:18:00 · 3119 阅读 · 2 评论 -
多线程编程的设计模式 临界区模式(二)
所谓模式就是脱离特定的例子使用更一般化的,通用化的表达方式来察看,描述,总结相同的问题.现在我们来研究这个模式:共享资源(sharedResource)参与者:在临界区模式中,一定有一个或一个以上的共享资源角色的参与.在上面这个例子中就是山洞(Corrie).共享资源参与者会被多个线程访问,这个角色的访问方法有两种类型,一种是多个线程访问也不会发生问题的方法,称为线程安全的方法,另一种就是在多个线原创 2006-09-07 12:17:00 · 3224 阅读 · 0 评论 -
多线程编程 高级主题(二)
Java 异步消息处理 在前一节实现异步调用的基础上,现在我们来看一下一个完善的Java异步消息处理机制.[写在本节之前] 在所有这些地方,我始终没有提到设计模式这个词,而事实上,多线程编程几乎每一步都在应用设计模式.你只要能恰如其份地应用它,为什么要在意你用了某某名称的模式呢原创 2006-03-09 11:10:00 · 5578 阅读 · 10 评论 -
多线程编程的设计模式 临界区模式(一)
多线程编程的设计模式 临界区模式(一)临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式.它是所有其它多线程设计模式的基础,所以我首先来介绍它.把着眼点放在范围上,这个模式叫临界区模式,如果把作眼点放在执行的线程上,这个模式就叫单线程执行模式.首先我们来玩一个钻山洞的游戏,我 Axman,朋友 Sager,同事 Pentium4.三个人在八角游原创 2006-08-28 08:01:00 · 3680 阅读 · 3 评论 -
多线程编程 基础篇 (二)
基础篇(二)在进入java平台的线程对象之前,基于基础知识(一)的一些问题,我先插入两个基本概念.[线程的并发与并行]在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent).而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行原创 2005-07-11 13:52:00 · 31375 阅读 · 11 评论 -
多线程编程 高级主题(一)
java实现异步调用 在JAVA平台,实现异步调用的角色有如下三个角色: 调用者 取货凭证 真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据. 所以连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现: public class FutureTicket{ private Object data = null; p原创 2006-03-05 11:47:00 · 4748 阅读 · 1 评论 -
多线程编程的设计模式 不变模式(二)
多线程编程的设计模式 不变模式(二) 不变模式(Immutable Pattern)顾名思义,它的状态在它的生命周期内是永恒的(晕,永恒的日月星晨,对象如人,太渺小,谈不上永恒!),不会改变的.对于其中的不变类(Immutable Class),它的实例可以在运行期间保持状态永远不会被改变,所以不需要采取共享互斥机制来保护,如果运用得当可以节省大量的时间成本. 请注意上面这段话,不变模式其中的不变原创 2006-10-25 11:50:00 · 3241 阅读 · 0 评论 -
多线程编程 基础篇 (四)
基础篇(四) [wait(),notify()/notityAll()方法] 关于这两个方法,有很多的内容需要说明.在下面的说明中可能会有很多地方不能一下子明白,但在看完本节后,即使不能完全明白,你也一定要回过头来记住下面的两句话:[wait(),notify()/notityAll()方法是普通对象的方法(Object超类中实现),而不是线程对象的方法][wait(),notify(原创 2005-07-22 12:10:00 · 29669 阅读 · 2 评论 -
多线程编程 实战篇 (五)
中断线程有了上一节[线程的中断],我们就好进行如何[中断线程]了.这绝对不是玩一个文字游戏.是因为"线程的中断"并不能保证"中断线程",所以我要特别地分为两节来说明.这里说的"中断线程"意思是"停止线程",而为什么不用"停止线程"这个说法呢?因为线程有一个明确的stop方法,但它是反对使用的,所以请大家记住,在java中以后不要提停止线程这个说法,忘记它! 但是,作为介绍线程知识的我,我仍然要告诉原创 2005-12-28 11:57:00 · 4689 阅读 · 4 评论 -
多线程编程 深入理解DCL的安全性
对于双检锁,其实有多种不同的用法,有很多种用法是无论如何不会出现问题的.我最初用双检锁来获取jndi对象时,立即有人告诉我双检锁是不安全的,我笑着告诉他:是否安全我比你更有把握.static DataSource ds = null;public static DataSource getDataSource(){ if(ds == null){ synchronized(XXX.class)原创 2006-08-17 16:10:00 · 4413 阅读 · 2 评论 -
多线程编程 实战篇 (四)
[线程的中断]不客气地说,至少有一半人认为,线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门.在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是让线程停止运行,反而是继续执行线程的手段.对于执行一般逻辑的线程,如果调用调用它的interrupt()方原创 2005-12-26 10:43:00 · 36651 阅读 · 26 评论