java基础要点:[7]Scoket编程
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特殊的双端队列存取步骤有要求,必须存一次取一次,交替进行
(共篇)上一篇:多线程