网络连接模型
C/S模式
客户端-服务端 client-server
C/S中,客户端程序要独立开发.server也要独立开发.
C/S的优势:效果好,易操作性好.
C/S的劣势:维护难度高.需要用户有额外的操作.
B/S结构
浏览器-服务器
B/S的优势:客户端统一,通信协议一直(http协议).维护难度低
B/S的劣势:效果差一些.
Socket和ServerScocket
ServerSocket 用于打开服务端口,等待客户端连接运行在服务端.
Socket用于连接指定服务器的指定端口.运行在客户端.
线程池
当我们需要并发执行任务时,会频繁的创建线程,并在执行任务后销毁.因为创建线程和销毁线程的性能开销比较大,对线程执行的效率影响较高.所以我们使用另一种方式:
首先创建一批空线程,当有任务需要执行时,取出一个空线程去执行该任务,当任务执行完毕后,将线程回收,等待下次执行任务.
这样我们就节省出了创建和销毁线程,从而提高程序的运行效率.
线程池和现实生活中的吃饭的碗很相似.
java中的线程池
ExecutorService实现了线程池的功能.
创建线程池的方法需要使用线程池工具类Executors
Excutors.newCachedThreadPool()
创建一个可以根据需要创建新线程的线程池.
Excutors.newFixedThreadPool(int size)
创建一个指定大小的线程池
Excutors.newScheduledThreadPool(int size)
创建一个指定大小的线程池,可以指定任务一个延迟时间,在超过这个时间后运行任务
Excutors.newSingleThreadExcutor()
创建一个只有一个线程的Executor
java中的双缓冲队列
在存取同步的基础上,可以保证存和取异步操作,比单缓冲效率高一些
BlockingDeque类 双缓冲队列
实现类
ArrayBlockingQueue:
规定大小的双缓冲队列,其构造方法要求传入一个int值,指定队列长度.存取数据本着先进先出原则
LinkedBlockingQueue:
不定长的双缓冲队列,队列最大值可以是int最大值.队列提供了一个带有int值的构造方法,可以变为定长的队列.
PriorityBlockingQueue:
类似于LinkedBlockingQueue,但存储数据不是本着先进先出的规则,而是本着自然排序原则(小->大)或者在构造方法中传入比较器,按照比较规则存取.
SynchronousQueue:
特殊的队列,存取必须满足存一次取一次的顺序.