每日一学之socket编程(二)

图片来自与百度图片

为什么要引入线程

在实际的开发中,一个ServerSocket服务端最小都有几十上百个客户端进行访问。当数据处理不及时,就会造成连接阻塞。

不知道大家是否还记的昨天的最简单的服务端编码每日一学之socket编程(一),大家可以使用将此服务端运行起来,用多个客户端进行访问,

使用上述代码打印出访问的客户端的IP和端口。你就会发现,如果上一个客户端一直不关闭,后面的客户端就会一直阻塞在那里。这样的软件是相当不友好的。因此我们需要引入多线程的机制来解决这个问题。

产生阻塞的位置

通过下面两段代码,帮助大家认识多连接socket会发生阻塞的位置。

代码一

运行结果

代码二

运行结果

因此,阻塞后续socket进行连接的罪魁祸首是对输入输出流的处理。

解决方式

多线程解决多连接

是不是so easy,不过在这里一定要注意:ServerSocket永远只有一个哦,他就一个端口,一个端口只能够被绑定一次。

不知道大家有没有发现上面程序的缺点,那就是会无限的创建线程,这样服务器也压力山大啊,因此,此种方法是不可取的。不过没关系,办法总比困难多,暂不还有好朋友线程池(ThreadPool)嘛,让他来帮我们把线程管理起来。

线程池解决多连接

在Java中利用Executors来获取线程池,Executors提供了四种线程池供大家在不同场景下进行选择,这里以newCachedThreadPool为例,为大家讲述怎么利用线程池来解决实际情况下的多连接问题。

newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

运行结果

从结果可以看出,第三次连接使用了第二次创建的线程。

下期提要

下期将接触到Java中的NIO中非常重要的一部分知识Buffer!敬请期待!

源码下载地址:https://pan.baidu.com/s/1bMRFkU

本文来自企鹅号 - 人人会编程媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

Python分布式进程

说明:本文是基于Py2.X环境, 分布式进程: 分布式进程是指的是将Process进程分布到多台机器上,充分利用多台机器的性能完成复杂的任务。在Thread和P...

2105
来自专栏杨建荣的学习笔记

Python多线程并发的简单测试

之前也写了一些简单的Python程序,对于多线程的并发一直没有涉及,今天决定先突破一下,把这个部分的内容先快速的掌握,然后在这个基础上细化改进。 我的...

34611
来自专栏架构师之路

线上服务CPU100%问题快速定位实战

功能问题,通过日志,单步调试相对比较好定位。 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。 58到家架构部,...

39211
来自专栏developerHaoz 的安卓之旅

关于 Android 进程和线程,你必须了解的东西

按照操作系统中的描述。线程是 CPU 调度的最小单元,同时线程也是一种有限的资源。而进程一般指一个执行单元,在 PC 和移动设备上指一个程序或者一个应用。一个进...

892
来自专栏逸鹏说道

C#线程篇---让你知道什么是线程(1)

线程线程,进程进程,到底什么是线程,什么是熟练多线程编程? 今天来和大家一起讨论讨论线程基础,让大家知道线程的基本构造。 说线程之前,先要了解下进程,这个可不能...

3469
来自专栏Pythonista

自动化部署nginx负载均衡及监控短信报警

开发脚本自动部署及监控 1.编写脚本自动部署反向代理、web、nfs; 要求: I、部署nginx反向代理三个web服务,调度算法...

802
来自专栏Golang语言社区

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库...

3467
来自专栏逸鹏说道

并发编程~先导篇上

并发 :一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

1388
来自专栏白驹过隙

RabbitMQ - TcpConnection析构引发的一次handshake_timeout

33813
来自专栏张善友的专栏

开源稳定的消息队列 RabbitMQ

    RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议。采用 Erlan...

21210

扫码关注云+社区