Java 5.0多线程编程实践 - 编程入门网
Java 5.0多线程编程实践时间:2011-06-19 IBMJava5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供 了丰富的API多线程编程在Java 5中更加容易,灵活。本文通过一个网络服务器 模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列 ,可重入锁等,还实践了Callable, Future等接口,并使用了Java 5的另外一 个新特性泛型。 简介 本文将实现一个网络服务器模型,一旦有客户端连接到该服务器,则启动一 个新线程为该连接服务,服务内容为往客户端输送一些字符信息。一个典型的网 络服务器模型如下: 1. 建立监听端口。 2. 发现有新连接,接受连接,启动线程,执行服务线程。 3. 服务完毕,关 闭线程。 这个模型在大部分情况下运行良好,但是需要频繁的处理用户请求而每次请 求需要的服务又是简短的时候,系统会将大量的时间花费在线程的创建销毁。 Java 5的线程池克服了这些缺点。通过对重用线程来执行多个任务,避免了频繁 线程的创建与销毁开销,使得服务器的性能方面得到很大提高。因此,本文的网 络服务器模型将如下: 1. 建立监听端口,创建线程池。 2. 发现有新连接,使用线程池来执行服务任务。 3. 服务完毕,释放线程到线程池。 下面详细介绍如何使用Java 5的concurrent包提供的API来实现该服务器。 初始化 初始化包括创建线程池以及初始化监听端口。创建线程池可以通过调用 java.util.concurrent.Executors类里的静态方法newChahedThreadPool或是 newFixedThreadPool来创建,也可以通过新建一个 java.util.concurrent.ThreadPoolExecutor实例来执行任务。这里我们采用 newFixedThreadPool方法来建立线程池。
表示新建了一个线程池,线程池里面有10个线程为任务队列服务。 使用ServerSocket对象来初始化监听端口。
服务新连接 当有新连接建立时,accept返回时,将服务任务提交给线程池执行。
这里使用线程池对象来执行线程,减少了每次线程创建和销毁的开销。任务 执行完毕,线程释放到线程池。 Java 5.0多线程编程实践(2)时间:2011-06-19 IBM服务任务 服务线程ServiceThread维护一个count来记录服务线程被调用的次数。每当 服务任务被调用一次时,count的值自增1,因此ServiceThread提供一个 increaseCount和getCount的方法,分别将count值自增1和取得该count值。由于 可能多个线程存在竞争,同时访问count,因此需要加锁机制,在Java 5之前, 我们只能使用synchronized来锁定。Java 5中引入了性能更加粒度更细的重入锁 ReentrantLock。我们使用ReentrantLock保证代码线程安全。下面是具体代码:
Java 5.0多线程编程实践(3)时间:2011-06-19 IBM服务线程在开始给客户端打印一个欢迎信息,
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |