java基础要点:[7]Scoket编程

2025-10-23 17:25:36

Socket编程

Socket 套接字:封装着端口号,ip地址,计算机名等信息的类

通过Socket我们可以于远程计算机进行通信。

网络通信模型:

C/S:client/Server

客户端对服务器端

客户端在计算机上的,是有特定的程序,实现特有的功能,用于连接服务器进行通信的

谁发起连接谁是用户

服务器端程序是等待客户连接,提供服务与之通信

通信协议:

计算机的通信的实质就是相互收发字节,那么按照一定的格式收发字节就是通信协议。

B/S结构:

浏览器端对服务器端。

固定了客户端和通信协议的C/S结构

 /sbin/ifconfig

linux终端查看ip

线程池

频繁的创建线程和销毁线程是非常消耗资源和性能的。

创建一些空的线程,将他们保存起来,当有人无需要并发执行时,

我们去让空闲的的线程来完成运行这个任务

,当任务完成后,将线程收回,等待下次分配任务。

这样我们自始至终只创建了开始创建的线程,并可以一重复利用来节省性能开销。

ExecutorService

线程池实现

通过Exectors类的静态方法创建几个不同实现的线程池

Executors.newCachedThreadPool()

创建一个线程池,当有任务的时候会检查线程池中是否有空线程,

若有就用他,若没有就创建新的线程。

Executors.newFixedThreadPool(int threads)

创建一个具有固定大小的线程池。

Executors.newScheduledThreadPool(int threads)

创建线程池,他可以安排任务在指定延时后并发执行或定期执行。

Executors.newSingleThreadExceutor()

创建一个单线程的线程池。该池中维护一个任务队列,以单线程方式执行队列中的每一个任务。

双端队列:

内部有两个队列实现,他们交替进行存取工作,这样至少可以保证2个线程可以同时存取工作,

但是对于两个线程同时进行存或者同时进行取操作,还是要求同步的

但是比单队列实现线程安全还是要快的

BlockingDeque双端队列

实现:

ArrayBlockingDeque该类实现的构造方法要求我们传入一个整数代表当前队列的长度

所以这个是一个固定大小的队列,存取原则FIFO先进先出原则

当元素调用offer存入队列时,若队列满时,那么可以设置延迟时间等待,

当超过延时等待会返回存入失败。

LinkedBlockingDeque变长双队列,长度不定,随着元素的数量而增大

最大可达Integer.MAX_value重载构造方法可以传入一个整数,是指变为一个定长的队列

存取原则FIFO先进先出原则

PriorityBlockingDeque

和LinkedBlockingDeque类似,但存取不是FIFO而是自然排序后获取

SynchronousQueue特殊的双端队列存取步骤有要求,必须存一次取一次,交替进行

(共篇)上一篇:多线程
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢