『Head First Java』第15章 网络与线程 读书笔记

要点一

  • 客户端与服务器的应用程序通过Socket连接来沟通。
  • Socket代表两个应用程序之间的连接,它们可能会是在不同的机器上执行的。
  • 客户端必须知道服务器应用程序的IP地址(或网域名称)和端口号。
  • TCP端口号是个16位的值,用来指定特定的应用程序。它能够让用户连接到服务器上各种不同的应用程序。
  • 从0~1023的端口号是保留给HTTP、FTP、SMTP等已知的服务。
  • 客户端通过建立Socket来连接服务器。

        Socket s = new Socket(“127.0.01”,4200);

  • 一旦建立了连接,客户端可以从socket取得低层串流。

        sock.getInputStream();

  • 建立BufferedReader链接InputStreamReader与来自Socket的输入串流以读取服务器的文本数据。
  • InputStreamReader是个转换字节成字符的桥梁。它主要是用来链接BufferedReader与低层的Socket输入串流。
  • 建立直接链接Socket输出串流的PrintWriter请求print()方法或println()方法来送出String给服务器。
  • 服务器可以使用ServerSocket来等待用户对特定端口的请求。
  • 当ServerSocket接到请求时,它会做一个Socket连接来接受客户端的请求。

要点二

  • 以小写t描述的thread是个独立的线程。
  • Java中的每个线程都有独立的执行空间。
  • 大写T的Thread是java.lang.Thread这个类。它的对象是用来表示线程。
  • Thread需要任务,任务是实现过Runnable的实例。
  • Runnable这个接口只有一个方法。
  • run()会是新线程所执行的第一项方法。
  • 要把Runnable传给Thread的构造函数才能启动新的线程。
  • 线程在初始化以后还没有调用start()之前处于新建立的状态。
  • 调用Thread对象的start()之后,会建立出新的执行空间,它处于可执行状态等待被挑出来执行。
  • 当Java虚拟机的调度器选择某个线程之后它就处于执行中的状态,单处理器的机器只能有一个执行中的线程。
  • 有时线程会因为某些原因而被堵塞。
  • 调度不能保证任何的执行时间和顺序,所以你不能期待它会完全地平均分配执行,你最多也只能影响sleep的最小保证时间。

要点三

  • Thread.sleep()这个静态方法可以强制线程进入等待状态到过了设定时间为止,例如Thread.sleep(200)会睡上200个毫秒。
  • 可以调用sleep()让所有的线程都有机会运行。
  • sleep()方法可能会抛出InterruptedException异常,所以要包在try/catch块,或者把它也声明出来。
  • 你可以用setName()方法来帮线程命名,通常是用来除错的。
  • 如果两个或以上的线程存取堆上相同的对象可能会出现严重的问题。
  • 如果两个或两个以上的线程存取相同的对象可能会引发数据的损毁。
  • 要让对象在线程上有足够的安全性,就要判断出哪些指令不能被分割执行。
  • 使用synchronized这个关键词修饰符可以防止两个线程同时进入同一对象的同一方法。
  • 每个对象都有单一的锁,单一的钥匙。这只会在对象带有同步化方法时才有实际的用途。
  • 线程尝试要进入同步化过的方法时必须要取得对象的钥匙,如果因为已经被别的线程拿走了,那就得等。
  • 对象就算是有多个同步化过的方法,也还是只有一个锁。一旦某个线程进入该对象的同步化方法,其他线程就无法进入该对象上的任何同步化线程。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值