2005年07月
本节继续上一节的讨论.
[一个线程在进入对象的休息室(调用该对象的wait()方法)后会释放对该对象的锁],基于这个原因.
在同步中,除非必要,否则你不应用使用Thread.sleep(long l)方法,因为sleep方法并不释放对象的锁.
这是一个极其恶劣的品德,你自己什么事也不干,进入sleep状态,却抓住竞争对象的监视锁不让其它需
要该对象监视锁的线程运行,简单说是极端自私的一种行为.但我看到过很多程序员仍然有在同步方法
中调用sleep的代码.阅读全文>
发表于 @ 2005年07月22日 12:13:00|评论(loading...)|编辑
在进入实战篇以前,我们简单说一下多线程编程的一般原则.
[安全性]是多线程编程的首要原则,如果两个以上的线程访问同一对象时,一个线程会损坏
另一个线程的数据,这就是违反了安全性原则,这样的程序是不能进入实际应用的.
安全性的保证可以通过设计安全的类和程序员的手工控制.如果多个线程对同一对象访问不
会危及安全性,这样的类就是线程安全的类,在JAVA中比如String类就被设计为线程安全的类.
而如果不是线程安全的类,那么就需要程序员在访问这些类的实例时手工控制它的安全性.
[可行性]是多线程编程的另一个重要原则,如果仅仅实现了安全性,程序却在某一点后不能继
续执行或者多个线程发生死锁,那么这样的程序也不能作为真正的多线程程序来应用.
相对而言安全性和可行性是相互抵触的,安全性越高的程序,可性行会越低.要综合平衡.
[高性能] 多线程的目的本来就是为了增加程序运行的性能,如果一个多线程完成的工作还不
如单线程完成得快.那就不要应用多线程了.
高性能程序主要有以下几个方面的因素:
数据吞吐率,在一定的时间内所能完成的处理能力.
阅读全文>
发表于 @ 2005年07月22日 12:11:00|评论(loading...)|编辑
[wait(),notify()/notityAll()方法]
关于这两个方法,有很多的内容需要说明.在下面的说明中可能会有很多地方不能一下子
明白,但在看完本节后,即使不能完全明白,你也一定要回过头来记住下面的两句话:
[wait(),notify()/notityAll()方法是普通对象的方法(Object超类中实现),而不是线程对象的方法]
[wait(),notify()/notityAll()方法只能在同步方法中调用]
阅读全文>
发表于 @ 2005年07月22日 12:10:00|评论(loading...)|编辑
线程对象的几个重要的方法
尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的.
本来打算用一节的篇幅来把线程方法中一些重要的知识说完,但这样下来估计要很常的篇幅,可能要用
好几节才能说把和线程方法相关的一些重在知识说完.阅读全文>
发表于 @ 2005年07月22日 12:07:00|评论(loading...)|编辑
目前在java平台上,要解析xml文档,即使只有""这样的一个标签,在生成document对象时,也至少要花费300ms左右,这样一次交互至少要在600ms左右,加上其它处理,一次通讯要1000ms以上,使得soap协议在java平台上根本不能进行实际应用.
其它这并不是SOAP协议的问题,着关键在于对XML文档的解析.基于这个原因,笔者实现了用正则表达式来解析XML文档的一些API,利用它来在替换中移动的大多数SOAP的接口,效率提高了10倍左右.
阅读全文>
发表于 @ 2005年07月11日 14:15:00|评论(loading...)|编辑
在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式
(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式
就叫并发(concurrent).
而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行
的方式叫做并行(parallel).
阅读全文>
发表于 @ 2005年07月11日 13:52:00|评论(loading...)|编辑
随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型是目前计算机
系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最
高为4G.事实上目前3.6G主频的CPU已经接近了顶峰.
如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么继续提高CPU
性能的方法就是超线程CPU模式.
那么,作业系统,应用程序要发挥CPU的最大性能,就是要改变到以多线程编程模型为主的并
行处理系统和并发式应用程序.
所以,掌握多线程编程模型,不仅是目前提高应用性能的手段,更是下一代编程模型的核心
思想.
多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只
和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源.从根本上说,这就是多
线程编程的最终目的.阅读全文>
发表于 @ 2005年07月11日 13:50:00|评论(loading...)|编辑
在UOP之数据缓存一文中我介绍了对象缓存的一般原则,对其中的大对象缓存只是简单
介绍了基本原理.本文详细地说明如何进行大对象缓存.阅读全文>
发表于 @ 2005年07月11日 13:47:00|评论(loading...)|编辑
在WEB/WAP这种以http协议为主的大用户应用中,即时性是非常重要的一个指标.客户端对一个
请求的响应时间的感受,可以说是衡量大规模用户的WEB应用的第一指标.
适时地采用异步处理,不仅可以提高对客户端的响应速度,而且使交互过程更为可靠!阅读全文>
发表于 @ 2005年07月11日 13:46:00|评论(loading...)|编辑
数据缓存是提高性能的有效手段,但缓存什么内容,如何缓存,这是重要的设计理念.也就是如何提高你的缓存命中率.
阅读全文>
发表于 @ 2005年07月11日 13:45:00|评论(loading...)|编辑