socket连接
1.Socket是一个代表两台机器之间网络连接的对象。
2.要创建Socket连接必须指定两项关于服务器的信息:它在哪里以及用哪个端口来收发数据。即IP地址与端口号。
Socket chatSocket = new Socket(“196.164.1.103”, 5000);
196.164.1.103:IP地址
5000:端口号
3.Socket连接的建立代表两台机器之间存有对方的信息,包括网络地址和TCP的端口号。
端口
1.TCP端口只是一个16位宽,用来识别服务器上特定程序的数字。
2.从0~1023的TCP端口号是保留给已知的特定服务使用,你不应该使用这些端口。
3.我们从1024~65535之间选择端口。
读写Socket
读:
1.建立对服务器的Socket连接
Socket chatSocket = new Socket(“127.0.0.1”, 5000);
2.建立连接到Socket上低层输入串流的InputStreamReader
InputStreamReader stream = new InputStreamReader(chatSocket.getInputStream());
3.建立BufferedReader来读取
BufferedReader reader = new BufferedReader(stream);
String message = reader.readLine();
写 :
1.对服务器建立Socket连接
Socket chatSocket = new Socket(“127.0.0.1”, 5000);
2.建立链接到Socket的PrintWriter
PrintWriter writer = new PrintWriter(chatSocket.getOutputStream());
3.写入数据
writer.println(“message to send”);
writer.print(“another message”);
线程
1.线程是独立的线程,它代表独立的执行空间。
2.Thread是Java中用来表示线程的类。
3.要建立线程就得创建Thread。
多线程:
1.Java虚拟机调用main()。
public static void main(String[] args) {
...
}
2.main()启动新的线程。新的线程启动期间main的线程会暂时停止执行。
Runnable r = new MyThreadJob();
Thread t = new Thread(r);
t.start();
Dog d = new Dog();
3.Java虚拟机会在线程与原来的主线程间切换直到两者都完成为止。
启动新的线程:
1.建立Runnable对象(线程的任务)
Runnable threadJob = new MyRunnable();
2.建立Thread对象并赋值Runnable
Thread myThread = new Thread(threadJob);
3.启动Thread
myThread.start();
Runnable接口
1.Runnable是一个接口,你会编写实现此接口的类,而此类就是你对线程要执行的任务的定义。
2.每个Thread需要一个任务来执行,一个可以放在执行空间的任务。
3.线程只在乎传入给Thread的构造函数的参数是否为实现Runnable的类。
4.Runnable这个接口只有一个方法:public void run().
线程调度器
1.线程调度器会做所有的决定,谁跑谁停都要看它。
2.显示调度器不可预测。
3.如果想要确保其他的线程有机会执行的话,就把线程放进睡眠状态。当线程醒来的时候,它会进入可执行状态等待被调度器挑出来执行。
注意:线程会产生并发性的问题
同步化
1.synchronized关键词代表线程需要一把钥匙来存取被同步化(synchronized)过的线程。
2.使用.synchronized关键词修饰方法使它每次只能被单一的线程存取。
3.要保护数据,就把作用在数据上的方法给同步化。