15 网络与线程
Socket是个代表两台机器之间网络连接的对象
问:不同程序可以共享一个端口嚒?
答:不行,如果你想要使用(绑定)某个已经被占用的端口,就会受到BindException,绑定一个端口就代表程序要在特定的端口上面执行。
用BufferedReader从Socket上读取数据:
用PrintWriter写数据到Socket上:
编写服务器应用程序要用到哪些东西?
一对Socket。一个会等待用户请求(当用户创建Socket时)的ServerSocket以及与用户通信用的Socket。
如何启动新的线程?
1、建立Runnable对象(线程的任务)
Runnable threadJob = new MyRunnable();
你会编写实现Runnable的类,而此类就是你对线程要执行的任务的定义。也就是说此方法会在线程的执行空间运行。
2、建立Thread对象(执行工人)并赋值Runnable(任务)
Thread myThread = new Thread(threadJob); threadJob这一对象必须要实现runnable类~~~!!!!
把Runnable对象传给Thread的构造函数。这会告诉Thread对象要把哪个方法放在执行空间去运行——Runnable的run()方法。
3、启动Thread
myThread.start();
Runnable带有会放在执行空间的第一项方法: run()
Thread.sleep(2000);这个方法可能会抛出InterruptedException异常,所有对它的调用都必须包在try/catch块中。
可以用synchronized来修饰一行或数行的指令而不必整个方法都同步化。
当你要对静态的方法做同步化时,Java会使用类本身的锁。如果同一类有两个被同步化过的静态方法,线程需要取得类地锁才能进入这些方法。
同步化的意义是制定某段工作要在不能分割的状态下执行。单独一步的操作不重要,重要的是有多个步骤的方法。
16 集合与泛型
泛型意味着更好的类型安全性。几乎所有以泛型写的程序都与处理集合有关。
对泛型来说,extends这个关键词代表“是一个……”且适用于类和接口。
取用Comparator版的sort()方法会用Comparator而不是元素内置的compareTo()方法来比较顺序。如果sort()方法带有Comparator,它就不会调用元素的compareTo()方法,而会去调用Comparator的compare()方法。comparator的级别优先于compare方法。
在Collection中有3个主要的接口:List、Set和Map
- LIST:顺序。知道索引顺序的集合。List知道某物在系列集合中的位置。可以有多个元素引用相同的对象。
- SET:独一无二。不允许重复的集合。
- MAP:用key来搜索的专家。使用成对的键值和数据值。