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要频繁的在不同线程切换,反而会引起处理性能的下降.线程池中最大的线程数,是考虑多种因素来事先设定的,比如硬件的 ...
随机推荐
- tp5.1批量删除商品
选中要删除的商品,点击批量删除 先在控制器使用sql语句查出商品信息goods 然后在html源码中使用goods变量. <table> {foreach $goods as $item} ...
- spark-3.0 application 调度算法解析
spark 各个版本的application 调度算法还是有这明显的不同之处的.从spark1.3.0 到 spark 1.6.1.spark2.0 到 现在最新的spark 3.0 ,调度算法有了一 ...
- django补充CBV和FBV模式
django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... ...
- EF Core 中处理 1对1 关系
最近在开发记录感想功能的时候用到了1对1的数据关系,具体情况是这样的,有这样两个1对1的类型 public class Item { public int Id { get; set; } publi ...
- WPF数据可视化-趋势图
环境: 系统: Window 7以上: 工具:VS2013及以上. 研发语言及工程: C# WPF 应用程序 效果: 简介: 不需要调用第三方Dll, 仅仅在WPF中使用贝塞尔曲线,不到500 ...
- win10下配置python环境变量(Python配置环境变量)
从官网下载Windows下的python版本,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性”. 2,选择“高级系统设置”--->选“环境变量”--- ...
- Python如何运行程序
人生苦短,我用Python. 作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的.通过了解代码如何运行,可指导我们写出效率更高的代码.下午看了<Python学习手册> ...
- 了解Bootstrap和开发响应式网站
什么是Bootstrap? Bootstrap是Twitter推出的一个开源的用于web前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CS ...
- 网页前端之CSS学习记录总结篇
标签: 块级标签block:div, p, h1-h6, ul, ol,li, dl, dt, dd,table,tr等,独占一行,可以设置宽高,默认是父标签的100%:行内标签inline:a,sp ...
- C++ std::vector 基本用法
#include <iostream> #include <vector> using namespace std; int main() { // 初始化的方式 std::v ...