(二)java网络编程前置技术
1. java.io下的字符流和字节流
网络编程的本质是进程间的通信,通信的基础是IO模型。
1.1字符流
1.2字节流
2.Socket
- Socket是网络通信的端点
2.1 通过Socket发送数据
2.2 通过Socket读取数据
3. 同步异步与阻塞非阻塞的概念
同步异步指的是通信机制的两种。
- 同步:调用一直等到结果才返回
- 异步:调用马上返回,但是结果要之后才能知道
阻塞非阻塞调用指的是等待调用结果返回之前调用方(请求方)处于什么状态。
- 阻塞:一心一意等着结果返回,其他事情都做不了。
- 非阻塞:该干嘛干嘛,虽然在等待结果,但丝毫不影响处理其他的任务。
4. 网络通信中的线程池
为了避免每来一个请求就创建线程,最后回收线程 所带来的资源浪费,我们可以复用线程,也就是重复使用所创建的一组线程来进行请求的处理,这一组线程也叫线程池。(类似于银行多窗口,某个窗口业务办理完,不会立即销毁,而是接着处理下一个请求)
4.1 Java提供的线程池
- Java提供了ExecutorService接口,通过实现该接口就可以实现各种各样的线程池管理。
- 把任务提交给线程池,其中,任务Runnable和Callable的区别在于,Runnable一般指没有特定返回值的任务,而使用Callable接口任务结束后有返回值。
- 提交给线程池之后得到的是Future对象,和该对象互动可了解任务的状态(完成or未完成),如果完成可以get()得到完成后返回的结果。
4.2java创建线程池的静态方法
- newSingleThreadExecutor:线程池中只有一个线程,我们对这一个线程进行不断的复用
- newFixedThreadPool:固定线程数量的线程池,当超过线程容量的时候,要进行等待
- newCachedThreadPool:比Fixed灵活,如果已有的线程全部是忙碌状态,可以为新任务创建新的线程并放入线程池
- newScheduledThreadPool:能够实现定时处理任务的线程池