线程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. SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例

    场景 SpringCloud-使用路由网关统一访问接口(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102733 ...

  2. 仿Inshot分享页图片圆形展开缩放动画

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/221 圆形展开缩放动画 关键代码: final Anima ...

  3. Gitlab + Jenkins 的 CI 实践

    0x00 事件 为了开发人员更高效的更新应用而采取的 CI 方式实践. 0x01 过程记录 1.Jenkins 设置 安装插件 Gitlab Hook Plugin Build Authorizati ...

  4. js的动态表格的增删改查完整代码

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Graylog 笔记

    安装 基本上有3种方式,1 yum安装2 rpm安装3 docker安装 yum安装 yum安装,参照官方文档是最好的:http://docs.graylog.org/en/3.0/pages/ins ...

  6. Spring Boot启动提示:org.apache.catalina.LifecycleException: A child container failed during start

    一.问题回顾 最近在做一个新项目,从git上下载导入idea后,启动项目,但是报了如下错误: java.util.concurrent.ExecutionException: org.apache.c ...

  7. Mysql - 高可用方案之MM+Keepalived

    一.概述 本文将介绍mysql的MM+Keepalived方案.该方案由两个mysql服务器组成,这两个mysql互为主备.其中一台主作为写服务器,另一台主作为读服务器.通过keepalived软件管 ...

  8. Dubbo学习系列之十四(Seata分布式事务方案AT模式)

    一直说写有关最新技术的文章,但前面似乎都有点偏了,只能说算主流技术,今天这个主题,我觉得应该名副其实.分布式微服务的深水区并不是单个微服务的设计,而是服务间的数据一致性问题!解决了这个问题,才算是把分 ...

  9. js自带的对数组中的操作

    这篇是我自己总结的,是我自己平常使用的不是很多的数组方法,而且都是js自带的,像大家经常使用的push.pop方法就没写里面.废话不多说,直接看代码 <!DOCTYPE html> < ...

  10. Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...