`
行者买刀
  • 浏览: 191273 次
  • 性别: 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接口用法详解.doc

    Java语言Socket接口用法详解.doc Java语言Socket接口用法详解.doc Java语言Socket接口用法详解.doc Java语言Socket接口用法详解.doc Java语言Socket接口用法详解.doc Java语言Socket接口用法详解.doc Java语言Socket...

    java socket用法

    java socket用法 含有java示例

    java对Socket进行了封装,可以通过注解调用双端的方法,让socket使用起来极其简单方便,是一个jar包

    所以我对socket进行了封装,客户端和服务端可以通过配置注解,让双方相互调用注解方法,提供了专门的工具类,让注解方法可以支持返回list或map等集合或其他的类型,三行代码你就可以完美的使用socket进行通信,支持...

    java Socket 通讯 源代码

    通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端进行工作,并与服务器进行通信。  要想与服务器通信必须具备三个条件:服务器程序、客户程序和连接它们的...

    java Socket与C#通信中中文乱码问题的解决方案

    两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端传过来的都是乱码。于是上网查,希望可以找到解决方法,可是,网上有好多的答案,经过了很多的实验,都不能很好的解决。没办法只能靠...

    Java Socket实现的简单聊天室实例

    使用socket实现的简单聊天室功能,包含客户端和服务器端代码,可以通过本实例快速了解java中socket的使用方法

    java c++ 通信之间的乱码解决方法

    java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket

    封闭式Java Socket代码

    封闭式Java Socket代码,提供TCP UDP 阻塞和非阻塞的方法,无需知道具体实现方式,只需要Main.java(Server)Main2.java(Client)Main(UDP)三个例程,简单建立联接。SocketIO接口提供精简化的方法,一体化输入输出,...

    简单的java socket源码

    简单的java socket源码,使用方法同我的另一个RMI实例的资源说明

    Java SSLSocket的使用

    NULL 博文链接:https://410063005.iteye.com/blog/1751243

    HP Sokcet ForJava

    Socket的dll文件,采用的是非常新的HP-Socket版本,demo是整套java工程,导入eclipse修改HpSocket.java文件中的服务器的IP和端口就可以测试,里面还包含了客户端接收服务器端返回的信息方法,看懂了客户端基本也可以...

    Java TCP IP Socket编程(原书第2版)

    这本PDF书主要说java的 Socket的原理和用法

    Java中通信类Socket的用法

    网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的...Socket通常常使用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个port号唯一确定。

    Java TCP/IP Socket编程 原书第2版

    现在几乎所有互联网应用程序都使用Java Socket进行通信,而本书专注的、教导式的方法,使读者能够快速掌握所有计算机通信的任务和技术要点。 本书特点: 对Socket编程的重点进行了集中简明的介绍,以使读者能够迅速...

    websocket + java socket 聊天吗平台

    该项目是一个基于WebSocket和Java Socket的交互型BS平台,提供聊天、直播、模拟面试和弹幕互动功能。用户可以进行点对点聊天、群聊...建议先了解WebSocket和Java Socket的基本概念和使用方法,然后比对项目代码进行理解

    三步学会Java Socket编程

     java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。  . Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端...

    Java中的Socket的用法

     Java中的网络通信时通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务器端,可以通过accept方法监听请求,监听请求后返回Socket,Socket用于完成具体数据传输,客户端也可以使用...

    Java Socket使用加密协议进行传输对象的方法

    主要介绍了Java Socket使用加密协议进行传输对象的方法,结合实例形式分析了java socket加密协议相关接口与类的调用方法,以及服务器、客户端实现技巧,需要的朋友可以参考下

    java socketNIO 实现多客户端聊天室 代码

    利用socketNIO实现的多客户端聊天室,非阻塞式IO,java代码编写,使用方法:先启动服务端代码再启动客户端代码,可启动多个客户端代码。若使用多个电脑启动客户端,需在客户端代码中更改一下ip地址。

    基于Socket的java网络编程

    基于Socket的java网络编程, Socket通讯的过程 Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server...

Global site tag (gtag.js) - Google Analytics