(Java学习)六、多线程与网络编程

1、实现多线程

1.1 进程和线程

(Java学习)六、多线程与网络编程_第1张图片
(Java学习)六、多线程与网络编程_第2张图片

1.2 线程实现方式

(Java学习)六、多线程与网络编程_第3张图片
(Java学习)六、多线程与网络编程_第4张图片

1.3 线程调度与控制

(Java学习)六、多线程与网络编程_第5张图片
Java是抢占式调度模型。

线程优先级高只是说明它获取CPU的几率高,但并不是每次都可以保证其实际运行时优先运行。

(Java学习)六、多线程与网络编程_第6张图片
(Java学习)六、多线程与网络编程_第7张图片
(Java学习)六、多线程与网络编程_第8张图片

1.4 多线程的实现方式

(Java学习)六、多线程与网络编程_第9张图片

2、线程同步

2.1 案例:卖票

(Java学习)六、多线程与网络编程_第10张图片
(Java学习)六、多线程与网络编程_第11张图片
(Java学习)六、多线程与网络编程_第12张图片
线程安全:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替进行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类为线程安全的。

2.2 同步代码块

(Java学习)六、多线程与网络编程_第13张图片

2.3 同步方法

(Java学习)六、多线程与网络编程_第14张图片
(Java学习)六、多线程与网络编程_第15张图片
如果不需要线程安全的实现,建议使用ArrayList代替Vector。
HashTable实现了Map接口。如果不需要线程安全的实现,建议使用HashMap代替HashTable。

(Java学习)六、多线程与网络编程_第16张图片
在这里插入图片描述
有的时候就算需要线程安全,也没有使用Vector。使用的是Collections.synchronizedList方法。

2.4 Lock锁

(Java学习)六、多线程与网络编程_第17张图片
一般结合try finally进行加锁和释放锁操作,如下:

(Java学习)六、多线程与网络编程_第18张图片

2.5 生产者消费者案例

(Java学习)六、多线程与网络编程_第19张图片
(Java学习)六、多线程与网络编程_第20张图片
(Java学习)六、多线程与网络编程_第21张图片

在这里插入图片描述

3、网络编程

3.1 概述

(Java学习)六、多线程与网络编程_第22张图片
(Java学习)六、多线程与网络编程_第23张图片
(Java学习)六、多线程与网络编程_第24张图片
(Java学习)六、多线程与网络编程_第25张图片
(Java学习)六、多线程与网络编程_第26张图片
(Java学习)六、多线程与网络编程_第27张图片
(Java学习)六、多线程与网络编程_第28张图片
(Java学习)六、多线程与网络编程_第29张图片

3.2 UDP通信程序

(Java学习)六、多线程与网络编程_第30张图片
(Java学习)六、多线程与网络编程_第31张图片

(Java学习)六、多线程与网络编程_第32张图片
(Java学习)六、多线程与网络编程_第33张图片

3.3 TCP通信程序

(Java学习)六、多线程与网络编程_第34张图片
(Java学习)六、多线程与网络编程_第35张图片
(Java学习)六、多线程与网络编程_第36张图片
(Java学习)六、多线程与网络编程_第37张图片
(Java学习)六、多线程与网络编程_第38张图片

(Java学习)六、多线程与网络编程_第39张图片
(Java学习)六、多线程与网络编程_第40张图片
(Java学习)六、多线程与网络编程_第41张图片
即发送一个输出结束的标记。服务器读到结束标记就不在readLine等待

(Java学习)六、多线程与网络编程_第42张图片

你可能感兴趣的:(基于Java,java,多线程)