(二)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:能够实现定时处理任务的线程池

 

posted @ 2021-02-27 12:16  不学无墅_NKer  阅读(124)  评论(0编辑  收藏  举报