线程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. C#线程学习笔记三:线程池中的I/O线程

    本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/20/MultiThreads.html,记录一下学习过程以备后续查用.     一.I/O线 ...

  2. oracle 字符串转为数字排序

    select * from user order by  to_number(dept_id) asc

  3. redlock算法及其问题

    背景 redlock算法是为了解决什么问题呢? 在单redis实例实现分布式锁时,可能会出现线程A设置完锁后,master挂掉,slave提升为master,因为异步复制的特性,线程A设置的锁丢失了, ...

  4. 微软发布ML.NET 1.0

    原文地址:https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-0/ 我们很高兴地宣布今天发布ML.NET 1.0.  ML.NET是一个 ...

  5. java之动态代理设计模式

    代理:专门完成代理请求的操作类,是所有动态代理类的父类,通过此类为一个或多个接口动态地生成实现类. 弄清动态代理的关键是清楚java的反射机制,在https://www.cnblogs.com/xix ...

  6. 实战Netty集群

    疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 1.写在前面 1.1 实战Netty集群的理由 Java基础练习中,一个重要的实战练习是: java的聊天程序 ...

  7. macbook无法下载软件问题解决

    今天新买了一台MacBook Pro,但是发现无法下载软件,在App Store中一直转圈圈. 方法:修改网络DNS为114.114.114.114和8.8.8.8,即可解决.

  8. jquery 常用选择器基础语法学习

    siblings方法的常用应用场景:选中高亮 实现代码 <!DOCTYPE html> <html> <head> <meta charset="U ...

  9. [转]自定义UiPath Activity实践

    本文转自:https://segmentfault.com/a/1190000017440647 为了对UiPath Activity的实现方式一探究竟,自己尝试实践编写了一个简单的Activity, ...

  10. arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...