线程demo:

线程:

package com.company.s5;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket; public class BeginThread extends Thread {
private Socket socket; public BeginThread(Socket socket) {
super();
this.socket=socket;
} @Override
public void run() {
try {
InputStream inputStream=socket.getInputStream();
InputStreamReader reader=new InputStreamReader(inputStream);
char[] charArray=new char[1000];
int readLength=-1;
while ((readLength=reader.read(charArray))!=-1){
String newstring=new String(charArray,0,readLength);
System.out.println(newstring);
}
reader.close();
inputStream.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}

服务端

package com.company.s5;

import java.net.ServerSocket;
import java.net.Socket; public class BeginServer {
public static void main(String[] args) throws Exception{
ServerSocket serverSocket=new ServerSocket(8888);
int runTag=1;
while (runTag==1){
Socket socket=serverSocket.accept();
BeginThread beginThread=new BeginThread(socket);
beginThread.start();
}
serverSocket.close();
}
}

客户端:

package com.company.s5;

import java.io.OutputStream;
import java.net.Socket; public class BeginClient {
public static void main(String[] args) throws Exception{
Socket socket=new Socket("localhost",8888);
OutputStream outputStream=socket.getOutputStream();
outputStream.write("我是中国人".getBytes());
outputStream.close();
socket.close();
}
}

线程池demo:

线程类

package com.company.s5;

import java.io.InputStream;
import java.net.Socket; public class ReadRunnable implements Runnable{
private Socket socket; public ReadRunnable(Socket socket) {
super();
this.socket = socket;
} @Override
public void run() {
try {
InputStream inputStream=socket.getInputStream();
byte[] byteArray=new byte[100];
int readLength=inputStream.read(byteArray);
while (readLength!=-1){
System.out.println(new String(byteArray,0,readLength));
readLength=inputStream.read(byteArray);
}
inputStream.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}

服务类

package com.company.s5;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors; public class Server2 {
private ServerSocket serverSocket;
private Executor pool; public Server2(int port, int poolSize) {
try {
this.serverSocket = new ServerSocket(port);
this.pool = Executors.newFixedThreadPool(poolSize);
}catch (Exception e){
e.printStackTrace();
}
}
public void startService(){
try {
for(;;){//无限循环
Socket socket=serverSocket.accept();
pool.execute(new ReadRunnable(socket));
}
}catch (Exception e){
e.printStackTrace();
}
} public static void main(String[] args) {
Server2 server2=new Server2(8088,10000);
server2.startService();
}
}

客户端类

package com.company.s5;

import java.io.OutputStream;
import java.net.Socket; public class BeginClient {
public static void main(String[] args) throws Exception{
Socket socket=new Socket("localhost",8088);
OutputStream outputStream=socket.getOutputStream();
outputStream.write("我是中国人".getBytes());
outputStream.close();
socket.close();
}
}

socket之线程来提高吞吐量的更多相关文章

  1. Python——用socket和线程实现全双工收发数据

    用socket和线程实现全双工收发数据 1.基础知识 Socket(套接字) 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.由此知道套接字是全双工的. 线程 ...

  2. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

  3. [转载]C# 多线程、控制线程数提高循环输出效率

    C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...

  4. Socket用线程池处理服务

    while(true){ try{ Socket clientSocket = serverSocket.accept(); new Thread(new HandlerThread(clientSo ...

  5. C# 多线程、控制线程数提高循环输出效率

    C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...

  6. [C++] socket - 4 [线程同步 简单例子]

    /*WINAPI 线程同步*/ #include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpParam ...

  7. [C++] socket - 3 [线程简单例子 代码]

    #include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数 D ...

  8. 网卡可以绑定cpu提高吞吐量

    请看大神帖子:https://blog.csdn.net/nawenqiang/article/details/82854929 需要做什么呢? 首先,确认你是否运行irqbalance,这个是nic ...

  9. Java线程池实现

    电脑的CPU资源是有限的,任务的处理速度与线程数量之间并不是正相关.当线程数量过多,CPU要频繁的在不同线程切换,反而会引起处理性能的下降.线程池中最大的线程数,是考虑多种因素来事先设定的,比如硬件的 ...

随机推荐

  1. d3.js 入门指南 - 仪表盘

    D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...

  2. angular8 导出excel文件

    angular package 1.xlsx npm install xlsx --save 2.file-saver npm install file-saver --save npm instal ...

  3. iOS 裁剪工具

    下载 demo和工具下载链接SPClipTool 使用说明 [[SPClipTool shareClipTool] sp_clipOriginImage:pickerImage complete:^( ...

  4. Django的Form验证(2)

    Django的Form验证(2) Form的含义及作用: 用于验证用户请求数据合法性的一个组件(校验数据的合法性) Django的Form实现步骤: 创建一个验证用户请求的模板 from django ...

  5. OpenResty + ModSecurity + OWASP CRS

    本篇将介绍如何使用OpenResty和ModSecurity 来构建自己的WAF,安装过程整体与Nginx是类似的,但也有些区别,在文中会特别指出,本篇算是用openresty对前面两篇nginx和c ...

  6. 如何让create-react-app锦上添花,满足实际需求?

    目录 前端部分 后端部分 create-react-app 是 React 官方为我们提供的一个单页应用脚手架,基于 webpack 配置了相关功能,babel. 图片处理.热加载.css 模块化.c ...

  7. 使用VeeValidate的data-vv-scope指定验证范围

    <div class="login" v-show="activeTab === 1"> <div class="panel-con ...

  8. java 超详细面经整理(持续更新)2019.12.19

    目录 Java SE 请你解释HashMap中为什么重写equals还要重写hashcode? 请你介绍一下map的分类和常见的情况 请你讲讲Java里面的final关键字是怎么用的? 请你谈谈关于S ...

  9. Lucene&Solr框架之第三篇

    1.SolrCore的配置 a)schma.xml文件 b)配置中文分析器 2.配置业务域和批量索引导入 a)配置业务域 b)批量索引导入 c)Solrj复杂查询(用Query页面复杂查询.用程序实现 ...

  10. DotNet Core中使用dapper

    我们都知道,ORM全称是,Object Relationship Mapper,即,对象关系映射.也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架叫做dappe ...