选择显示字体大小

java编程技巧(信号量,管道)

一、信号量

在进行多线程编程时,经常要使用同步互斥机构,但java本身没有提供的同步互斥机构,仅提供了两个与同步互斥有关的方法:wait()和notify(),可以用来设计信号量类:mysemaphore,它是按照dijkstra提出的计数信号量的思想设计的。

mysemaphore有两个最重要的成员方法:p()和v()。这两个方法实际就实现了信号量的p操作和v操作。具体描述如下:

public synchronized void p(){ 

semaphore--;

if(semaphore<0){

try{

wait();

}catch(interruptedexception ie){}

}

}

public synchronized void v(){

semaphore++;

if(semaphore<=0)

notify();

}


其中,semaphore变量记录了信号量的状态,wait()方法相当于block原语,用于阻塞线程的执行,notify()方法相当于wakeup原语,用于唤醒线程恢复运行。由于这两个方法定义为synchronized,这样java虚拟机可保证这两个方法的原子执行,从而实现了p、v操作。

二、管道

并发程序的多个线程之间的通讯通常是使用管道进行,jdk提供了两个管道类:pipedinpustream和pipedoutputstream,前者用于输入,后者用于输出。这两种管道应该是能够多次连接和关闭,在实现过程中,却发现它们在关闭后,不能重新建立连接。经过仔细调试后,发现jdk的源代码在处理关闭时释放资源存在着缺陷,因此需要编写自己的管道类:mypipedinputstream和mypipedoutputstream。这两个类直接从inputstream和outputstream继承而来,其成员方法与实现基本与pipedinputstream和pipedoutputstream一致,只是在处理关闭时,将类中的成员变量的值恢复成未连接时的初始值。另外,原有的管道了提供的管道容量只有1024个字节,在传输数据量较大时,可能会发生溢出,而在自己的管道类中可以任意设置管道容量,例如可以根据需要把管道容量设为64kb。以下仅给出了相应的关闭例程:

1.mypipedinputstream

public void close() throws ioexception {

in = -1;

out = 0;

closedbyreader = true;

connected = false;

closed = true;

buffer = new byte[pipe_size];

}

2.mypipedoutputstream

public void close() throws ioexception {

if (sink != null) {

sink.receivedlast();

sink.closed = true;

}

sink = null;

connected = false;

出处 (http://noc.cs.net.net.cn/ 瞿宏阳 )


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons