面向对象编程思想概览(五)线程的同步
一、简介
本讲以程序设计中多个线程同时访问一个数据易造成数据混乱的情况入手,引出了线程同步的解决方法。课程结合生活中的事例,介绍了线程同步的概念,线程同步的两种实现方法,分析了线程同步的核心思想和同步方法的优缺点,并以多人同时对同一银行账户存、取款的实例,对比线程同步程序和普通程序的编写方法和运行结果,让同学们了解线程同步控制程序的重要性和必要性,使得大家对线程同步的程序开发有了一个感性的认识。
二、主要内容
- 线程的同步
- 线程同步的两种实现方法
- 线程同步的应用
- 线程同步的核心
- 线程同步的缺点
- 小结
三、详细内容
3.1、线程的同步
- 为了避免多个线程同时访问一个数据而造成数据混乱的情况
- 确保在任何时间点一个共享的资源只被一个线程使用
- 保证数据的有效
3.2、线程同步的必要性
- 由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据,从而会对共享数据的并发访问可能产生竞争。(竞争访问)
- 如果没有正确的保护措施(同步),对共享数据的访问会造成数据不一致和错误。(数据混乱)
3.2、Java语言中线程同步的实现方法
3.2.1、方法同步
- 类中的方法设计为synchronized方法,防止多线程数据崩溃。
- 使用synchronized方法,能保证线程对这个方法的一次访问。
public synchronized void methodName([parameterList]){
……
}
例:
public synchronized void deposit(){
……//允许访问控制的代码
}
3.2.2、对象同步
- synchronized关键字放在类中的对象前,限制该对象在任何时候只有一个线程访问。
synchronized(object){
……//允许访问控制的代码
}
例:
public void withdraw(){
ssynchronized(this){
……//允许访问控制的代码
}
}
3.3、实例
见参考视频
3.4、线程同步的核心
多个线程同时访问共享数据时,线程同步可以防止数据混乱,其手段是对共享数据加锁。核心是将并行访问变为串行访问。
3.5、线程同步的缺点
线程同步在进行交叉访问时,线程之间互相等待,每个线程都不能往下执行,可能会导致死锁。
3.6、小结
利用生活的事例,我们理解了面向对象编程中的:
线程同步的概念
线程同步的实现方法
线程同步的应用
线程同步的核心和缺点
采用线程同步的技术手段,解决了生活中的问题:多人同时对同一账户存、取款的问题和多人同时购买同一张票的问题。
四、参考视频