Java网络编程期末复习——第四章 多线程

(一)基本概念

进程和线程的概念

进程:一个执行中的程序,每一个进程都有自己独立的一块内存空间、一组系统资源。
线程:一个执行的程序内部,可以包含多个顺序执行流,每个执行流称为一个线程。

线程与进程的关系

进程:享有独立的代码和数据空间,切换开销大。
线程:同一类线程共享代码和数据空间,线程切换的开销小。
多进程:在操作系统中,能同时运行多个任务程序。
多线程:在同一应用程序中,有多个顺序流同时执行。

并发和并行的区别

并行:多个CPU处理多个进程
并发:一个CPU,坐几个进程(单核CPU,假的多线程)

多线程的作用

提高用户体验,使程序的响应速度更快
适合于开发服务程序(如聊天服务等)
适合于开发有多种交互接口的程序(如聊天程序的客户端,网络下载工具)
减轻编写交互频繁、涉及面多的程序的困难(如监听网络端口)
程序的吞吐量会得到改善(同时监听多种设备,如网络端口、串口、并口以及其他外设)
可以分别设置各个任务的优先级以优化性能。

何时使用多线程

程序需要同时执行两个或多个任务
程序需要实现一些需要等待的任务时:用户输入、文件读写操作、网络操作、搜索等
需要一些后台运动的程序

(二)Java 创建线程的方法 及 使用

通过继承Thread类来创建

定义Thread类的子类
重写该类的run方法
重写该类的start方法(可选)
运行方法 : new 出新类对象-> start()

实现Runnable接口来创建

定义Runnable接口的实现类,
仅需实现接口的run方法
运行方法:作为 new Thread的参数传入

(三)线程的生命周期

生命周期的概念是首次引入,以后学web还会提到

线程是动态的具有一定的生命周期,分别经历从创建、执行、阻塞直到消亡的过程。

线程的优先级

Java将线程的优先级分为10个等级,分别用1-10之间的数字表示。数字越大表明线程的级别越高。
Thread类的三个静态常量:
MAX_PRIORITY 10
MIN_PRIORITY 1
NORM_PRIORITY 5 (默认)
setPriority / getPripority
守护线程 (Daemon): Java中特殊的优先级最低的线程,主要用于为系统中的其它对象和线程提供服务。
setDaemon

(四)线程同步

多个线程访问一个数据对象时,可能对数据造成的破坏。
所以引出线程同步,来解决线程安全问题

解决方案:
互斥锁:保证在每一个时刻,只能有一个线程拥有该互斥锁,其它线程如果需要获得该互斥锁,必须等待当前拥有该锁的线程将其释放
每个类一把锁,每个对象一把锁,只有获取锁的线程可以进入同步区域。
关键字synchronized
(1)synchronized可以用于方法上
(2)synchronized修饰程序块

线程间的合作

死锁

线程间竞争共享资源,互不相让,永远进入一种等待状态。

解决方法:

避免嵌套封锁
只对有请求的进行封锁
wait () 和notify()/notifyAll()方法

线程池的优点

减少创建和销毁线程的开销
避免创建太多的线程导致系统崩溃
简化编程模型

四种可用的线程池:

newSingleThreadExecutor
newFixedThreadPool
newCachedThreadPool
newScheduledThreadPool

(五)线程的通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值