Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API,多线程编程在Java 5中更加容易,灵活。
以下是一个范例的源码。
1、Server类源码
package com.jeyo.java5;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
public static final int PORT = 19788;
private ExecutorService pool = null;
private ServerSocket serverSocket = null;
public void start(){
//创建一个可重用固定线程数的线程池
pool = Executors.newFixedThreadPool(10);
//创建一个可根据需要创建新线程的线程池
//pool = Executors.newCachedThreadPool();
try{
serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress(PORT));
System.out.println("开始监听...");
while(true){
Socket socket = serverSocket.accept(); //获取客户端线程,没有则等待
//异步执行
//要是线程池繁忙,是等待还是终止?
pool.execute(new ServiceThread(socket));
}
}catch(Exception e){
e.printStackTrace();
}
cleanup();
}
public void cleanup() {
if(serverSocket != null){
try{
serverSocket.close(); //关闭服务器线程
}catch(IOException e){
e.printStackTrace();
}
}
pool.shutdown(); //关闭线程池
}
public static void main(String args[]) {
Server server = new Server();
server.start();
}
}
2、ServiceThread类源码
package com.jeyo.java5;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.locks.ReentrantLock;
public class ServiceThread implements Runnable, Serializable {
private static final long serialVersionUID = 0;
private Socket connectedSocket = null;
private static int count = 0;
private static ReentrantLock lock = new ReentrantLock(); //重入锁:是一种递归无阻塞的同步机制
ServiceThread(Socket socket) {
connectedSocket = socket;
}
public void run(){
increaseCount();
int curCount = getCount();
String helloString = "最新序列号:" + curCount + "\n";
//该对象只有一个线程可用来执行任务,若任务多于一个,任务将按先后顺序执行
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new OtherTask()); //异步执行其它逻辑代码
DataOutputStream out = null;
try{
//往客户端线程输出信息
out = new DataOutputStream(connectedSocket.getOutputStream());
out.write(helloString.getBytes());
//获取客户端传送过来的信息
DataInputStream reader = new DataInputStream(new BufferedInputStream(connectedSocket.getInputStream()));
System.out.println(reader.readUTF());
try{
out.write("其它任务的结果:\n".getBytes());
String result = future.get(); //同步获取任务结果
out.write(result.getBytes());
}catch(Exception e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(out != null){
try{
out.close(); //关闭输出流
}catch(Exception e){
e.printStackTrace();
}
}
executor.shutdown(); //关闭线程执行器
}
}
private int getCount() {
int ret = 0;
try{
lock.lock();
ret = count;
}finally{
lock.unlock(); //切记要在finally中释放锁
}
return ret;
}
private void increaseCount() {
try{
lock.lock();
++count;
}finally{
lock.unlock();
}
}
}
3、OtherTask类源码
package com.jeyo.java5;
import java.util.concurrent.Callable;
public class OtherTask implements Callable<String> {
public String call() throws Exception {
return "执行了其它逻辑代码。";
}
}
4、Client类源码
package com.jeyo.java5;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Client {
private Socket client;
public Client(String host, int port){
try{
client = new Socket(host, port);
}catch(IOException e){
System.out.println("服务器连接失败!");
close();
}
}
public void send(){
DataOutputStream out = null;
try{
//往服务器发送信息
out = new DataOutputStream(client.getOutputStream());
out.writeUTF("中国");
out.flush();
//获取服务器传送过来的信息
DataInputStream reader = new DataInputStream(new BufferedInputStream(client.getInputStream()));
int bufferSize = 2048; //2K
byte[] buf = new byte[bufferSize];
int read = 0;
while((read=reader.read(buf)) != -1){
System.out.println(new String(buf, 0, read));
}
}catch(IOException ex){
ex.printStackTrace();
}finally{
try{
out.close();
}catch(IOException e){
e.printStackTrace();
}
close();
}
}
private void close(){
if(client != null){
try{
client.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Client client = new Client("localhost", Server.PORT);
client.send();
}
}
分享到:
相关推荐
这个压缩包中的文件提供了几个关于Java多线程交互的实例,可以帮助我们深入理解如何在并发环境中控制线程的同步,确保数据的一致性和安全性。 首先,让我们讨论一下标题和描述中提到的关键概念——“多线程交互”和...
总的来说,《JAVA多线程教学演示系统》这篇论文不仅是对JAVA多线程技术的理论探讨,更是一个实践与教学相结合的优秀范例,对于提升学生的多线程编程能力具有很高的参考价值。VB图书管理系统论文范文虽不在本文讨论...
总结,这个"java多线程应用实现示例"通过小球运动的模拟,深入浅出地展示了Java多线程的运用,包括线程创建、同步、通信和线程池管理等关键概念。学习这个示例有助于理解和掌握Java多线程编程,为实际项目开发中的...
【大漠多线程范例源码】是一个关于多线程编程的实例集合,由知名IT专家"大漠"提供,旨在帮助开发者深入理解和实践Java或其他编程语言中的多线程技术。多线程是现代软件开发中不可或缺的一部分,特别是在并发处理、高...
(注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...
综上所述,"Java多线程下载器范例"涉及了Java多线程编程、文件I/O操作、线程同步和通信、下载策略等多个核心概念。通过理解和实践这些知识点,开发者可以构建出高效、稳定的文件下载工具。在实际项目中,这样的下载...
采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...
Java 多线程编程源码范例和详细说明 Java 多线程编程是一种能够同时执行多个任务的技术,可以提高程序的并发性和响应性,使得程序能够更好地利用 CPU 资源。本文将通过一个简单的 Java 多线程编程示例,向读者介绍...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
JAVA多线程设计模式_中国铁道出版社 本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计...
4. **多线程**:Java提供了内置的多线程支持,如Thread类和Runnable接口。通用范例可能会包含线程同步、锁机制(如synchronized关键字、ReentrantLock等)、并发工具类(如ExecutorService、CountDownLatch、...
本书适合那些希望在Java多线程领域有所建树的读者,它不仅提供了理论知识,更提供了大量的实践机会,通过范例和习题相结合的方式,帮助读者快速掌握多线程设计模式。同时,本书也适合那些在实际项目开发中需要处理...
- 使用Java实现网络聊天室,应用多线程和网络编程知识。 通过这个压缩包中的范例,你可以深入学习和实践这些Java编程模式,增强对Java语言和设计原则的理解,提升编程能力。同时,理论与实践相结合,不断调试和...
6. **多线程**:Java支持并发编程,范例可能包含线程的创建、同步、线程池的使用等。理解如何在多线程环境下协调任务执行,是构建高性能应用程序的关键。 7. **反射机制**:Java的反射机制允许在运行时动态访问类的...
这是一本关于Java开发的大百科全书,以知识点为脉络,以实例(200多个实例贯穿全书)为主要内容,深入阐述了Java开发的各种方法和技巧,权威性毋庸置疑。首先,全书以Java开发环境搭建开篇,循序渐进地介绍了Java语法...
在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...
6. **多线程**:Java内置了对多线程的支持,包括Thread类和Runnable接口,以及synchronized关键字、wait()、notify()等同步机制。理解并发编程原理,能有效提升程序的并行性能。 7. **网络编程**:Java提供了Socket...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中在代码的重要部分加上标注使读者更加容易...
《Java范例开发大全》共22章,内容涉及Java开发环境的搭建、Java基础类型与运算符、条件控制语句、异常处理、数组、字符串、输入输出流、面向对象及其四大特征、内部类与接口、Java常用类、集合、多线程编程、Java...
本资源包含了前十章的部分代码,这意味着我们能够接触到Java的基础语法、面向对象编程、异常处理、集合框架、IO流、多线程等核心主题。 1. **基础语法**:这部分可能包含变量声明、数据类型、运算符、流程控制(如...