`
vissul
  • 浏览: 194359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程池服务器程序

阅读更多

package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.*;
import java.util.concurrent.*;

public class MultiThreadServer {
    private int port=6666;
    private ServerSocket serverSocket;
    private ExecutorService executorService;//线程池
    private final int POOL_SIZE=10;//单个CPU线程池大小
   
    public MultiThreadServer() throws IOException{
        serverSocket=new ServerSocket(port);
        //Runtime的availableProcessor()方法返回当前系统的CPU数目.
        executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
        System.out.println("服务器启动");
    }
   
    public void service(){
        while(true){
            Socket socket=null;
            try {
                //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
                socket=serverSocket.accept();
                executorService.execute(new Handler(socket));
               
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
   
    public static void main(String[] args) throws IOException {
        new MultiThreadServer().service();
    }

}

class Handler implements Runnable{
    private Socket socket;
    public Handler(Socket socket){
        this.socket=socket;
    }
    private PrintWriter getWriter(Socket socket) throws IOException{
        OutputStream socketOut=socket.getOutputStream();
        return new PrintWriter(socketOut,true);
    }
    private BufferedReader getReader(Socket socket) throws IOException{
        InputStream socketIn=socket.getInputStream();
        return new BufferedReader(new InputStreamReader(socketIn));
    }
    public String echo(String msg){
        return "echo:"+msg;
    }
    public void run(){
        try {
            System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
           //method begin
           
           
            //method end
            BufferedReader br=getReader(socket);
            PrintWriter pw=getWriter(socket);
            String msg=null;
            while((msg=br.readLine())!=null){
                System.out.println(msg);
                pw.println(echo(msg));
                if(msg.equals("bye"))
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                if(socket!=null)
                    socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

分享到:
评论

相关推荐

    C++多线程网络聊天程序 .zip

    在IT领域,多线程技术是提升程序性能和并发处理能力的重要手段,特别是在网络编程中...同时,这也为我们提供了改进和优化聊天程序的机会,例如,使用非阻塞I/O进一步提高性能,或者引入线程池来更有效地管理线程资源。

    编写简单的RMI程序 多线程web 服务器

    在实现多线程Web服务器时,我们需要创建一个主线程池,用于接收新的连接请求,然后将每个请求分配给一个工作线程来处理。每个工作线程负责读取请求、解析HTTP协议、执行相应的操作(如返回静态文件或执行动态脚本)...

    易语言多线程数据池模块源码(文本池+数据池-多线程版)

    总的来说,易语言的多线程数据池模块源码为开发者提供了一种优化数据处理和提高程序性能的有效工具。通过深入学习和理解这个模块的工作原理,开发者可以在处理大规模数据时,利用多线程和数据池的优势,编写出更加...

    delphi多线程socket服务器客户端

    在IT领域,Delphi是一种基于Object Pascal编程语言的集成开发环境(IDE),广泛用于构建桌面应用程序...随着需求的增加,可以扩展功能,如添加多线程池管理、数据压缩、消息队列等高级特性,以提升系统的性能和可靠性。

    多线程聊天程序多线程聊天程序多线程聊天程序

    多线程聊天程序是一种在计算机编程中实现的通信应用程序,它允许多个用户同时参与聊天,通过并发处理来提高系统的响应速度和效率。在多线程环境下,每个用户交互或者消息发送都可以在一个独立的线程中运行,使得聊天...

    Linux多线程高并发服务器

    在IT行业中,Linux多线程高并发服务器设计是构建高性能网络服务的核心技术之一。这种设计模式主要用于处理大量的并发连接请求,充分利用系统资源,提供高效稳定的服务。以下将详细阐述相关知识点: 1. **多线程**:...

    TCP多线程服务器demo

    在“TCP多线程服务器demo”中,服务器程序会开启多个线程,每个线程负责独立地accept来自客户端的连接。当有新的连接请求到达时,服务器会将这个连接分配给一个空闲的线程进行处理。这样,即使一个线程正忙于处理...

    C++多线程聊天程序

    在C++编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高了效率和响应性。在“C++多线程聊天程序”这个示例中,我们将探讨如何利用C++的多线程特性来创建一个聊天应用程序。这个程序可能...

    基于多线程的高性能服务器程序的设计.pdf

    在设计高性能服务器程序时,多线程是一种常见的技术手段,其目的在于充分利用多核处理器的并行计算能力,同时提升服务器处理并发请求的效率。在多线程编程中,线程同步与通信是关键的技术问题,尤其是在IO操作中,...

    Java 多线程web服务器

    在Java中,多线程是并发编程的重要工具,允许程序同时执行多个任务,这对于处理来自不同客户端的Web请求至关重要。 在设计一个多线程Web服务器时,我们需要考虑以下几个核心知识点: 1. **线程池**:为了有效管理...

    轻量级java多线程池demo

    本文将深入探讨一个轻量级的Java多线程池实现,这个实现允许线程间的通信,并提供了类似Akka Actor的调度功能。 首先,我们要理解Java中的线程池。线程池是一种线程使用模式,它维护一组可以重复使用的线程,避免了...

    java写的多线程下载程序源码

    Java编写的多线程下载程序源码是一种利用Java语言特性实现高效大文件下载的技术。在这一程序中,主要涉及到了Java的多线程处理和网络编程两大核心知识点。 首先,让我们深入理解Java的多线程。Java提供了丰富的多...

    多线程服务器的几种常用模型

    ### 多线程服务器的几种常用模型 #### 1. 进程与线程 在计算机科学中,**进程**和**线程**是两个重要的概念。进程是资源分配的基本单位,而线程则是调度的基本单位。每个进程都有自己的独立地址空间,这意味着不同...

    基于多线程的web服务器

    本文将深入探讨"基于多线程的Web服务器"这一主题,包括多线程技术在Web服务器中的应用、优势、挑战以及相关的实现细节。 多线程是一种编程模型,它允许程序同时执行多个任务或子任务。在Web服务器中,多线程可以极...

    多线程的运用e语言多线程 e多线程

    在编程领域,多线程是一种重要的并发执行机制,它允许程序同时执行多个任务,从而提高系统资源利用率和程序响应速度。E语言(可能是错误输入或者是某个特定编程环境或语言的简称)中的多线程功能也不例外。本文将...

    自己写的多线程并发服务器模型 3种实现方式

    多线程技术允许一个程序同时执行多个独立的任务,这对于处理并发请求的服务器来说至关重要。在服务器端,每个连接的客户端请求可以被分配到一个单独的线程来处理,这样可以避免单线程模型中的串行处理导致的性能瓶颈...

    多线程程序设计

    多线程在现代软件开发中广泛应用,尤其是在服务器端、实时系统以及图形用户界面等领域。下面我们将深入探讨多线程程序设计的关键知识点。 一、线程的概念 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一...

    java 多线程操作数据库

    本文将基于一个具体的Java多线程操作数据库的应用程序,深入探讨其背后的原理、实现细节以及潜在的挑战。 #### 核心知识点: 1. **多线程基础**:多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在...

    商业编程-源码-多线程端口扫描程序2.zip

    在IT行业中,多线程端口扫描程序是一个重要的工具,特别是在网络安全性、系统管理以及渗透测试等领域。这个“商业编程-源码-多线程端口扫描程序2”压缩包包含了一个实现此类功能的源代码,它可以帮助我们理解多线程...

Global site tag (gtag.js) - Google Analytics