2 zhou1586981 zhou1586981 于 2016.09.19 17:53 提问

java多线程的线程池问题、Socket

在这段代码中,我要怎么实现【new Thread(new Worker(clientSocket)).start();】用到线程池、而不是每次建立链接都去创建一个新线程。麻烦讲下思路最好把改好代码贴出来看看。

    while (true) {
        Socket clientSocket;
        try {
                clientSocket = serverSocket.accept();
                logger.info("receive socket " + clientSocket.getInetAddress().getHostName());

                new Thread(new Worker(clientSocket)).start();
        } catch (IOException e) { // TODO Auto-generated catch block
                                    // e.printStackTrace();
        }
    }

1个回答

ouygh
ouygh   2016.09.19 18:56

使用线程池, jdk自带
比如:
//创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
ExecutorService pool = Executors.newSingleThreadExecutor();
Thread t1 = new MyThread();
Thread t2 = new MyThread();
// 将线程放入池中进行执行
pool.execute(t1);
pool.execute(t2);

// 最后执行完毕关闭线程池
pool.shutdown();

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java Socket简单聊天实现 —— 使用线程池及同步锁
现有的聊天室功能虽然已经完成,但是由于客户端的频繁连接与断开,会使得服务端频繁的创建及销毁线程。随着客户端的增加,服务端的线程也在增加,这无疑会对服务端的资源造成浪费,并且由于过多的线程导致的过度切换也会为服务端带来崩溃的风险。与此同时,多个线程会共享服务端的集合属性allOut,这里还存在着多线程并发的安全问题。 为此,需要重构聊天室案例,使用线程池技术来解决服务端多线程问题,并解决多线程并发
Socket通讯解决并发采用线程池
作业交完了,代码分享一下!不多说什么了 服务器端ThreadServer ThreadPool.java package thread; import java.util.LinkedList; public class ThreadPool extends ThreadGroup{     private boolean isClosed=false;//线程池是否关闭
JAVA SOCKET 实现多线程文件传输(Server端的多线程,Client一次只有一个)
1.最近一个项目需要实现客户端文件上传到server,但是不希望把文件上传z
java多线程(2)---基于ExecutorService的socket通信线程池
了解线程池                socket通信,如果服务器端采用的实现方式是:一个客户端对应一个线程。那么,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其状态,选择另外一个线程运行,并在上下文转换(context switch)时恢复阻塞线程的状态。随着线程数的增加,
java socket & Nio 之 利用线程池改进
前面描述了BIO中采用1对1模式的服务器架构,发展它不适合高并发,高性能的服务器业务需求,那么接下来我们采用一个改进版来改进一下这个结构,这个结构主要是改进服务器端的程序。改进的措施如下: 1.在服务器接收到客户端的每个连接后,把客户端的socket包装成成功一个Task。 2.在服务器端根据系统的资源建一个固定大小的线程池和Task队列,然后线程池去管理处理线程的执行。 经过上面的处理,我们
基于线程池的TCP服务器(JAVA实现)
在开始的tcp/ip socket中 服务端实现方式是一个客户端一个线程,但是,每个新的线程都会消耗系统资源。随着线程数的增加。线程将消耗越来越多的系统资源。 对于这个问题,使用线程池限制线程总数并重复使用线程可以避免这个问题, 具体做法是,在服务器启动时创建一个有固定线程数量组成的线程池,当一个新的客户端连接请求连入服务器时,将由线程池中的一个线程处理,该线程处理完这个客户端之后又返回线程池
Java Socket:单线程/多线程/线程池ServerSocket编程
Socket将网络抽象成可读写的字节流,其对用户掩藏了底层繁杂的细节。Java使用Socket对象实现客户端网络流程:请求连接、发/收数据、关闭链接;使用ServerSocket对象实现服务端网络流程:绑定端口/本地接口、侦听请求、接受请求、收/发数据和关闭连接。下面总结了模拟daytime协议服务端的程序,分别用单线程、多线程和固定线程池的方式实现,每种实现方式在一切无视应用场景的情形下都难分伯仲
Java Socket 多线程编程,处理百万级的数据并发。
感谢网上的大神分享的代码,然后我根据我们项目的需求,组装成余下代码,基本上大概的框架就是这个模式,需要修改的就是业务数据的传递 ,其他的都是不用修改的。 本着学习他人代码,学会他人分享精神,因此将我花了两天研究的代码分享出来(晚上的时间)。希望有大神多多指教我这个编程菜鸟的技术,本菜鸟感激不敬。
Socket编程(四)---使用线程池优化服务端
在服务端使用线程池,来优化服务端处理的能力。
【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)
了解线程池      在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客户端对应一个线程。但是,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其