`
行者买刀
  • 浏览: 194187 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java socket用法(二)

    博客分类:
  • J2SE
阅读更多
 package multithread2;
public class ThreadPoolTester {
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("用法: java ThreadPoolTest numTasks poolSize");
System.out.println(
" numTasks - integer: 任务的数目");
System.out.println(
" numThreads - integer: 线程池中的线程数目");
return;
}
int numTasks = Integer.parseInt(args[0]);
int poolSize = Integer.parseInt(args[1]);
ThreadPool threadPool = new ThreadPool(poolSize); //创建线程池
// 运行任务
for (int i=0; i<numTasks; i++)
threadPool.execute(createTask(i));
threadPool.join(); //等待工作线程完成所有的任务
// threadPool.close(); //关闭线程池
}//#main()
/** 定义了一个简单的任务(打印ID) */
private static Runnable createTask(final int taskID) {
return new Runnable() {
public void run() {
System.out.println("Task " + taskID + ": start");
try {
Thread.sleep(500); //增加执行一个任务的时间
} catch (InterruptedException ex) { }
System.out.println("Task " + taskID + ": end");
}
};
}
}

 ThreadPoolTester 类的createTask()方法负责创建一个简单的任务。ThreadPoolTester
类的main()方法读取用户从命令行输入的两个参数,它们分别表示任务的数目和工作
线程的数目。main()方法接着创建线程池和任务,并且由线程池来执行这些任务,最后
调用线程池的join()方法,等待线程池把所有的任务执行完毕。
运行命令“java multithread2.ThreadPoolTester 5 3”,线程池将创建3 个工作线程,
由它们执行5 个任务。程序的打印结果如下:
Task 0: start
Task 1: start
Task 2: start
Task 0: end
Task 3: start
Task 1: end
Task 4: start
Task 2: end
Task 3: end
Task 4: end

从打印结果看出,主线程等到工作线程执行完所有任务后,才结束程序。如果把

main()方法中的“threadPool.join()”改为“threadPool.close()”,再运行程序,则会看到,
尽管有一些任务还没有执行,程序就运行结束了。

 

 

EchoServer 利用线程池ThreadPool 来完成与客户的通信任务。

package multithread2;
import java.io.*;
import java.net.*;
public class EchoServer {
private int port=8000;
private ServerSocket serverSocket;
private ThreadPool threadPool; //线程池
private final int POOL_SIZE=4; //单个CPU时线程池中工作线程的数目
public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
//创建线程池
//Runtime 的availableProcessors()方法返回当前系统的CPU的数目
//系统的CPU越多,线程池中工作线程的数目也越多
threadPool= new ThreadPool(
Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println("服务器启动");
}
public void service() {
while (true) {
Socket socket=null;
try {
socket = serverSocket.accept();
threadPool.execute(new Handler(socket)); //把与客户通信的任务交给线程池
}catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[])throws IOException {
new EchoServer().service();
}
}
/** 负责与单个客户通信的任务,代码与3.6.1 节的例程3-5 的Handler类相同 */
class Handler implements Runnable{…}

在以上EchoServer 的service()方法中,每接收到一个客户连接,就向线程池
ThreadPool 提交一个与客户通信的任务。ThreadPool 把任务加入到工作队列中,工作
线程会在适当的时候从队列中取出这个任务并执行它。

分享到:
评论

相关推荐

    JAVA Socket 经典教程

    - **Socket的使用**:客户端通过`Socket(String host, int port)`建立到服务器的连接,`connect()`方法指定服务器地址和端口。 3. **数据交换** - **输入/输出流**:Socket通信基于字节流。服务器端使用`Socket....

    java socket 视频流转发socket

    在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流的传输。 首先,让我们了解什么是ServerSocket。在Java中,`java.net.ServerSocket`类是服务器端使用的,它监听特定...

    Java Socket 聊天通信演示代码

    这个Java Socket 聊天通信演示代码将涵盖上述基本概念,帮助初学者理解如何使用Java实现网络通信。实际的代码会包含更多的细节,如错误处理、多线程管理和用户界面交互等。通过学习和实践这个示例,你可以进一步提升...

    Java Socket使用实例

    这个"Java Socket使用实例"提供了一个基础的网络通信模板,通过学习和实践,你可以进一步了解Socket通信的原理,掌握在网络环境下进行数据交换的方法。在实际项目中,Socket通信常用于构建分布式系统、实时聊天应用...

    java socket 客户端代码

    在Java编程语言中,Socket是实现网络通信的基础组件,它为两台计算机之间的通信提供了低级别的接口。在本文中,我们将深入探讨Java Socket...通过理解Socket的工作原理和使用方法,你可以创建出功能强大的网络客户端。

    Java Socket网络编程.pdf

    Java Socket网络编程是Java平台中的核心特性,它为开发者提供了在TCP/IP协议下创建网络应用的能力。Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动...

    java socket 经典版本

    这个经典版本可能包含了一系列关于如何有效使用Java Socket进行网络通信的实例和最佳实践。 首先,让我们深入了解Java Socket的基本概念。Socket通常被称为套接字,它是两台计算机之间通信的端点。在TCP/IP协议族中...

    Java socket编程实现两台主机间的通信

    二、Java Socket 编程的实现方法 Java Socket 编程的实现方法可以分为四步: 1. 打开一个 Socket 连接:在客户端,使用 Socket 类来建立连接,并指定主机名和端口号。在服务器端,使用 ServerSocket 类来监听...

    java socket 中文教程

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、基于TCP/IP协议的网络通信服务。本教程将深入探讨Java Socket的相关知识点,旨在帮助开发者理解和掌握如何在Java环境中构建网络...

    java socket 用户真实IP测试

    在Java中,我们可以使用`HttpServletRequest`对象的`getHeader()`方法来获取这个值。 ```java HttpServletRequest request = ...; // 获取HttpServletRequest实例 String clientIp = request.getHeader("X-...

    Java Socket传输图片源代码

    在本示例中,我们将深入探讨如何使用Java Socket进行图片的传输,这对于理解网络编程和数据交换至关重要。"Java Socket传输图片源代码"这个主题涵盖了以下几个关键知识点: 1. **Java Socket基础**: - Socket是...

    java socket 经典教程

    本教程将深入探讨Java Socket编程的概念、用法以及实际应用中的关键点。 Java Socket提供了低级别的网络通信接口,允许应用程序创建和维护与其他主机上的应用程序之间的连接。Socket基于TCP/IP协议,保证了数据的...

    java使用Socket类接收和发送数据

    在Java中,Socket类位于`java.net`包下,提供了多种构造函数和方法来实现网络连接的建立、数据交换以及连接的关闭。 1. **连接服务器** - 建立连接:客户端通常需要知道服务器的IP地址或域名以及服务端口。在Java...

    Java Socket 实用教程

    Java Socket实用教程主要涵盖的是Java中的网络编程技术,特别是如何使用Socket进行客户端和服务端的通信。Socket在Java中是实现TCP/IP通信的基础,它提供了进程间网络通信的能力。本教程可能包括以下几个关键知识点...

    java socket 实现SMTP协议 发送邮件.docx

    Java Socket 实现 SMTP 协议发送邮件 ...通过这个示例,我们可以了解 Java Socket 的使用方法,并学习如何实现 SMTP 协议来发送邮件。 扩展阅读 * Java Socket 编程 * SMTP 协议详解 * Base64 编码原理

    java socket 学习资料

    Java Socket是Java编程语言中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的网络连接功能。Socket在Java中被广泛用于构建客户端-服务器应用,例如创建Web服务器、聊天应用程序、文件传输等。以下是...

    java socket 编程文档

    二、Socket编程基础 1. 创建ServerSocket:服务端首先创建一个ServerSocket实例,指定监听的端口号。例如: ```java ServerSocket serverSocket = new ServerSocket(8080); ``` 2. 接受连接:当有客户端请求连接时,...

    Java Socket实战之二 多线程通信 .

    我们将结合"Java Socket实战之二 多线程通信"这篇博文进行深入解析。 首先,了解Socket的基本概念。Socket在计算机网络中扮演着客户端与服务器之间通信的桥梁角色。它提供了低级别的、面向连接的、基于TCP/IP协议的...

    JAVA socket收发数据,并支持断网自动连接

    本话题主要关注如何使用Java Socket实现数据的收发,并在客户端断网或者服务器重启后实现自动重连功能。 1. **Java Socket基础** - **Socket类**:在Java中,`java.net.Socket`类代表一个TCP连接,它封装了输入/...

    java Socket 多线程

    客户端通常使用Socket类来建立到服务器的连接,并通过Socket的`getInputStream()`和`getOutputStream()`方法获取输入/输出流,进行数据的发送和接收。 ```java Socket socket = new Socket("localhost", 8080); ...

Global site tag (gtag.js) - Google Analytics