socket之线程来提高吞吐量
线程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之线程来提高吞吐量的更多相关文章
- Python——用socket和线程实现全双工收发数据
用socket和线程实现全双工收发数据 1.基础知识 Socket(套接字) 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.由此知道套接字是全双工的. 线程 ...
- Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件
//**********************************************************************************//说明: 阻塞线程下为什么不触 ...
- [转载]C# 多线程、控制线程数提高循环输出效率
C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...
- Socket用线程池处理服务
while(true){ try{ Socket clientSocket = serverSocket.accept(); new Thread(new HandlerThread(clientSo ...
- C# 多线程、控制线程数提高循环输出效率
C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...
- [C++] socket - 4 [线程同步 简单例子]
/*WINAPI 线程同步*/ #include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpParam ...
- [C++] socket - 3 [线程简单例子 代码]
#include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数 D ...
- 网卡可以绑定cpu提高吞吐量
请看大神帖子:https://blog.csdn.net/nawenqiang/article/details/82854929 需要做什么呢? 首先,确认你是否运行irqbalance,这个是nic ...
- Java线程池实现
电脑的CPU资源是有限的,任务的处理速度与线程数量之间并不是正相关.当线程数量过多,CPU要频繁的在不同线程切换,反而会引起处理性能的下降.线程池中最大的线程数,是考虑多种因素来事先设定的,比如硬件的 ...
随机推荐
- Another git process seems to be running in this repository
今天在推送项目的时候git突然报如题的错误.查了一下是由于git被另外一个程序占用,产生原 原因在于Git在使用过程中遭遇了崩溃,部分被上锁资源没有被释放. 解决方案也很简单,在git中找到对应的in ...
- 简单实现vue列表点击某个高亮显示
比如ul下有4个li元素. 给每个li绑定点击事件@click="select_li(index),然后这个点击时间会将一个全局变量 selectLi 赋值为 index 的值. 然后在每个 ...
- 防止 window.open 被拦截
window.open('/app/dashbuilder.html?' + group.id, '_blank'); // 一般_self不会被拦截 // 改为 let newTab = windo ...
- [译]C# 7系列,Part 5: private protected 访问修饰符
原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ C#有几个可访问性 ...
- visualStudio 的一些常用使用操作总结
今年苟了差不多一整年,期间断断续续把c++ prime plus 看完了 ,发现并没有什么鸟用 ,但是对代码怎么形成二进制的过程 动态内存管理 这些模模糊糊的确实理解更深刻些了 特别是c++过度到c# ...
- 《Dotnet9》系列之建站-中文站最好WordPress主题,自媒体,博客,企业,商城主题一网打尽
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.本文介绍WordPress主题JustNews,本站Dotnet9既是使用WordPress + JustNews主题搭建而成的 ...
- Python—类和实例对象
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- 【.net core 入坑】.net core 3.0 报错:在 FETCH 语句中选项 NEXT 的用法无效
目录 1.事故现场: 2.分析及解决方案: 1.事故现场: 在项目中使用.net core 3.0,在EF链接sqlserver2008,在程序中使用了分页用的skip和take,程序报错: 在 FE ...
- 简单了解一下:var 、let、const
var 重新赋值,重新定义,作用域 属于:function scope: let 声明的变量只在 let 命令所在的代码块内有效,Block scope. const 声明一个只读的常量,一旦声明,常 ...
- Spring(4)AOP
Spring(4)AOP 1.AOP概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...