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个回答

使用线程池, 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
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java Socket简单聊天实现 —— 使用线程池及同步锁
现有的聊天室功能虽然已经完成,但是由于客户端的频繁连接与断开,会使得服务端频繁的创建及销毁线程。随着客户端的增加,服务端的线程也在增加,这无疑会对服务端的资源造成浪费,并且由于过多的线程导致的过度切换也会为服务端带来崩溃的风险。与此同时,多个线程会共享服务端的集合属性allOut,这里还存在着多线程并发的安全问题。 为此,需要重构聊天室案例,使用线程池技术来解决服务端多线程问题,并解决多线程并发
java socket & Nio 之 利用线程池改进
前面描述了BIO中采用1对1模式的服务器架构,发展它不适合高并发,高性能的服务器业务需求,那么接下来我们采用一个改进版来改进一下这个结构,这个结构主要是改进服务器端的程序。改进的措施如下: 1.在服务器接收到客户端的每个连接后,把客户端的socket包装成成功一个Task。 2.在服务器端根据系统的资源建一个固定大小的线程池和Task队列,然后线程池去管理处理线程的执行。 经过上面的处理,我们
Socket通讯解决并发采用线程池
作业交完了,代码分享一下!不多说什么了 服务器端ThreadServer ThreadPool.java package thread; import java.util.LinkedList; public class ThreadPool extends ThreadGroup{     private boolean isClosed=false;//线程池是否关闭
java多线程(2)---基于ExecutorService的socket通信线程池
了解线程池                socket通信,如果服务器端采用的实现方式是:一个客户端对应一个线程。那么,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其状态,选择另外一个线程运行,并在上下文转换(context switch)时恢复阻塞线程的状态。随着线程数的增加,
基于线程池的TCP服务器(JAVA实现)
在开始的tcp/ip socket中 服务端实现方式是一个客户端一个线程,但是,每个新的线程都会消耗系统资源。随着线程数的增加。线程将消耗越来越多的系统资源。 对于这个问题,使用线程池限制线程总数并重复使用线程可以避免这个问题, 具体做法是,在服务器启动时创建一个有固定线程数量组成的线程池,当一个新的客户端连接请求连入服务器时,将由线程池中的一个线程处理,该线程处理完这个客户端之后又返回线程池
Java socket 多线程编程 示例
转载https://www.cnblogs.com/qqzy168/p/3772215.html 参照网上代码: 1.工程:   2.代码: Client.java package com.my.socket.test; import java.io.BufferedReader; import java.io.IOException; import ja
socket连接---多线程 线程池---TCP/IP半包、粘包、分包
一  ServerSocket工作原理:                      客户端socket请求连接Serversocket的请求连接,按照请求顺序进入客户端连接请求队列(队列的容量是由操作系统完成的),ServerSocket的构造函数中的backlog就是用来指定请求队列的长度。 这个值会失效的三种情况:大于操作系统默认值|小于等于0|没有设置。 (见下面)
Socket编程(四)---使用线程池优化服务端
在服务端使用线程池,来优化服务端处理的能力。
JAVA SOCKET 实现多线程文件传输(Server端的多线程,Client一次只有一个)
1.最近一个项目需要实现客户端文件上传到server,但是不希望把文件上传z
JAVA服务器端Socket线程池
JAVA服务器端Socket线程池,包括多线程、线程同步,希望对大家有帮组,谢谢
【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)
了解线程池      在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客户端对应一个线程。但是,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其
C#线程池多线程Socket通讯 服务器端和客户端示例
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace socket2016 { class Program { static void Main(string[] args) {
多线程 线程池 sock IO复用
转自:http://jackyhongvip.iteye.com/blog/1339768   原文链接:http://jzhihui.iteye.com/blog/1271122   windows 操作系统中允许的最大线程数。   ==========================================================================
java nio socket实现多线程多用户通信
本程序在客户端异常退出后有时会在服务器端有死循环,望读者知悉 server端代码: package com.lifeix.d20131009; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; im
JAVA并发处理经验(四)并行模式与算法6:socket的服务端多线程
一、前言 关于网络编程,这一章一般用NIO编程,但是我们得一步步,免得扯着蛋蛋。我们先温习一下,socket的服务器---客户端;我们适用服务端用线程池,线程池没有懂得小火炮,看以前的,或者直接问群里就ok。 二、socket服务端多线程 友情提示:可以用spring或者注解线程池,在实际运用的时候; 2.1 socket线程池实现客户端 package pattern.nio; im
Java Socket 多线程编程,处理百万级的数据并发。
感谢网上的大神分享的代码,然后我根据我们项目的需求,组装成余下代码,基本上大概的框架就是这个模式,需要修改的就是业务数据的传递 ,其他的都是不用修改的。 本着学习他人代码,学会他人分享精神,因此将我花了两天研究的代码分享出来(晚上的时间)。希望有大神多多指教我这个编程菜鸟的技术,本菜鸟感激不敬。
mina 使用线程池例子及socket并发测试
mina
c++ socket 服务器 线程池 海量 并发 windoes linux 源代码 SPServer
http://blog.sina.com.cn/s/blog_6294abe701011tyl.html 对socket服务器海量并发比较感兴趣,从网上搜了一些材料,和大家分享一下: 一、SPServer: 一个基于线程池(包括HAHS和LF)的开源服务器框架 SPServer 是一个实现了半同步/半异步(Half-Sync/Half-Async)和领导者/追
java TCP/IP Socket编程-----进阶--多线程-----笔记8
概述: 如何充分利用cpu多核资源,以前是开启多进程,现在更加轻量级的多线程来实现,实现多线程,常用就是Thread类和实现Runnable接口,通常采用后者,多线程主要是重写run()方法所以需要开启线程的事情放入到run()方法内,而服务器就是处理客户端请求,所以我们要把处理客户端的工作搬到run方法内 1.服务端的线程类 EchoProtocol.java package com.tc
利用线程池实现ServerSocket的多客户端连接
**利用线程池实现ServerSocket的多客户端连接**------------------------------ 实际应用中,对于Socket通信而言基本都是多个客户端连接服务器端,因此简单的ServerSocket/Socket组合就无法满足要求了,而老是新开线程的话又太浪费资源,这里就用到Java自带的线程池ThreadPoolExcutor技术来实现多客户端连接服务端** Thr
Linux网络编程 - TCP Socket 简单练习:线程池实现并发服务器
服务器函数执行流程 main init_system creat_pthread_pool child_work thread_manager task_manager process_client
Java 用线程池实现web服务器
今天在应用中用到了线程池,于是我就想web服务器肯定是用到了线程池,但是他们是怎样实现的呢?于是我就试着写了一个简单的模型package httpserver;import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import jav
C-socket编-线程池
#include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <assert.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <errno.h> /*#include "threadpool.h"*/ #define DEFAUL
Java Socket(六) 使用多线程实现多客户端的通信
问题一个服务端可以跟多个客户端通讯基本步骤1.服务器端创建ServerSocket方法,循环调用accept()方法等待客户端连接2.客户端创建socket和服务的请求连接3.服务端接受客户端的请求,建立专线连接4.建立连接的两个socket在一个单独的线程上对话5.服务器端继续等待新的连接创建一个服务器相关的线程类:package com.test;/** * Created by SuPhoe
socket(多线程)
服务端:线程类:package cn.itcast.webservice.socket.server.thread;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket;/** * Description: 天气查询run
完整的使用线程池的多线程C/S Socket类
完整的使用线程池的多线程C/S Socket类 翻译水平有限,不明之处请阅读原文。 原文:http://www.codeproject.com/Articles/33352/Full-Multi-thread-Client-Server-Socket-Class-with   使用线程池实现的完整的 Client/Server Socket通讯类,很容易使用,也很容易被集成
c# socket线程池实现
服务器端:      PoolServer.cs类      using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; name
c++多线程模式下的socket编程(线程池实现)
     socket 编程可以说是一个基本的技术掌握,而多个客户端向服务端发送请求又是一个非常常见的场景,因此多线程模式下的socket编程则显得尤为常见与重要。     本文主要利用线程池的技术,来实现多线程的模式,线程池的优点就不多述了,相信大家都能理解,就是减少了线程创建于销毁的时间,提高多线程的性能。     首先,先写个线程池:    下面分别是头文件 和cpp文件 #ifnd...
Android Socket编程(多线程、双向通信)
原帖地址:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html
Java Socket编程(阻塞多线程,线程池)
服务端:主线程Server类public class Server { private static ExecutorService executorService = Executors.newFixedThreadPool(10); public static void main(String[] args){ ServerSocket serverSocke...
java socket多线程文件传输实例项目
使用java socket开发的多线程文件上传下载的实例项目,多线程并发测试中可以支持200个,可能由于我电脑的配置问题,一般在并发大于200时client端可能会出现"阻塞"问题,还请大家指教
vs2008 MFC 线程池实现的完整的 Client/Server Socket通讯类
原文:http://www.codeproject.com/Articles/33352/Full-Multi-thread-Client-Server-Socket-Class-with   使用线程池实现的完整的 Client/Server Socket通讯类,很容易使用,也很容易被集成到C++应用程序中。也适用于Linux/Unix。 在“Best C++/MFC article of
Java之多线程、线程池
多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少一个线程(main),但是可以有多个线程的,则这个程序称为多线程程序。每一个线程执行不同的任务,多线程程序并不能提高程序的运行速度,可以提高程序的运行效率。 CPU处理可以分为分时调度和抢占式调度,分时调度:即线程是轮流被CPU处理器所处理,处理时间大致相同,抢占式调度:即让优先级最高的线程使用CPU,如果优先级
java Socket 使用多线程实现一对多的通信
在上一篇完成了p
第三天 : 线程池的使用(面试)
去面试遇到的问题现在给大家分享一下,希望对java初学者有用!
采用线程池和消息队列的“伪异步”I/O模型
参考:《Netty权威指南》 由于 一请求一线程 的I/O模型,在高并发时创建大量的线程,严重降低系统性能,并且容易造成线程堆栈溢出等问题。 采用线程池和消息队列的“伪异步”模型,是一种改良版的模型。 原理:当有新的客户端请求到来时,将socket封装成一个Task(该任务实现了Runnable接口),投递到线程池中进行处理。           而线程池始终维护一个消息队列和N个
socket编程示例(多线程)
客户端代码如下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChatClient { BufferedReader reader; PrintWriter writer; Socket sock; public void go(){ System.out.p
socket服务端、开源网络库和线程池
java版本的socket服务端public class Main { private static ServerSocket serverSocket; private final static ExecutorService exec = Executors.newFixedThreadPool(30); public static void main(String[]...
使用Socket创建带连接池的多线程文件传输服务器和客户端实例
1.创建带连接池的多线程文件传输服务器和客户端 . 介绍 我们现在已经拥有的 MultithreadedServer 每当有客户机申请一个连接时都在一个新 Thread 中创建一个新 ConnectionHandler。这意味着可能有一捆 Thread “躺”在我们周围。而且创建 Thread 的系统开销并不是微不足道的。如果性能成为了问题(也请不要事到临头才意识到它),更高效
JAVA多线程面试50题 -- 内容由浅及深,全会的是神
原文在:http://blog.chinaunix.net/uid-540802-id-4431193.html 只是做备忘录。 本文由 ImportNew - 李 广 翻译自 javarevisited。欢迎加入Java小组。转载请参见文章末尾的要求。不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的
Java多线程和高并发
本文介绍Java多线程运用知识点. 一.如何新建一个线程? (1).继承java.lang.Thread,覆盖run(). (2).实现接口java.lang.Runnable,覆盖run(). (3)实现接口java.lang.Callable,覆盖call()此方法可以带返回值和抛出异常. 二.如何选择线程的实现方式? 实现接口的线程有更大的灵活性,更符合面向对象分工的思想,将线程
linux 下多线程epoll编程 -socket
转载自:http://blog.csdn.net/susubuhui/article/details/37906287 Linux socket+epoll+pthread+队列 实现并发服务器。代码有封装,仅做参考 Linux下多线程epoll编程,在高并发下测试通过,可以支持10000用户同时在线,测试服务器为Linode的vps服务器,操作系统为Centos64 //
Java多线程,线程同步synchronized,线程死锁【线程池常规用法】多线程并发处理
工作内容: 1.线程同步:synchronized (锁类) 2.线程死锁 3.生产者与消费者模式 4.线程练习 线程同步: Synchronized(Object){ 代码块 } Public static synchronized void method(){ 代码块 } 尽量用在最细致的地方(精确位置) 线程死锁:发生在请求同步方法,同步方法请求同一个对象时
Java多线程 锁对象和线程池
原文出处:新哥 1:锁(Lock)     1.1、java提供了一个锁的接口,这个锁同样可以达到同步代码块的功能,API文档上说使用锁比使用synchronized更加灵活。   1.2、 如何使用这个“锁”     //1.创建一个所对象,我们可以理解为写一个synchronized代码块     public static Lock lock = new
java线程池管理以及分布式
http://www.csdn.net/article/2014-04-16/2819353转载
java中基于线程池的任务调度设计
基于Timer类的设计缺陷,java5中引入的ScheduledExecutor线程池设计。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。 实例代码: i
TCP网络通信/线程池
TCP网络通信预备知识 socket: 在TCP/IP协议中表示:IP地址+TCP端口号或UDP端口号唯一标识网络通讯中的一个进程,IP地址+端口号就称为socket。 网络字节序: 在学习C语言的时候,我们大家都应该知道大小端 的问题,在网络数据流中同样也有大小端之分,网络数据流的地址规定: 先发出的数据是低地址,后发出的地址是高地址,即网络数据流应采用大端字节序,低地址高字节。 #include
java高并发编程-java线程池浅析
java线程池在多线程应用场景中被广泛使用,作此记录以便后面翻看,如发现有错误,烦请大家指正。 带着如下问题,我们来了解下java提供的线程池技术 1,为什么要用线程池? 2,java提供的线程池有哪几种?API怎么用? 3,jdk提供的线程池是一个什么原理,其内部是怎么实现的? 我们带着这些问题来看一下。 首先,为什么要有线程池呢?或者说传统的线程模式存在什么问题需要我们使用线程池?
Java线程池及观察者模式解决多线程意外死亡重启问题
Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!
javaWeb 使用线程池+队列解决"订单并发"问题
遇到问题: 最近做微信支付,项目上线一阵,发现一个问题。有一条订单流水居然在数据库的出现两次。这个问题非常严重。 查看微信回调系统的接口代码发现代码是没错的(正常情况下),而这次遇到非正常情况了 原因:微信支付成功后回调我们系统接口在极短时间回调了2次,微信官方文档说明了,是最短15s回调一次。 前几天微信支付抽风了,可能业务出现了波动。 简单来说就是在并发情况下没有做数据唯一性处理,不
相关热词 c#开发的dll注册 c#的反射 c# grid绑定数据源 c#多线程怎么循环 c# 鼠标左键 c# char占位符 c# 日期比较 c#16进制转换为int c#用递归求顺序表中最大 c#小型erp源代码
立即提问