一,本章目标
①了解线程同步的作用
②了解同步代码块及同步方法的作用
③了解死锁的产生
二,具体内容
说明:在多线程的开发中,同步与死锁的概念是非常重要的,一定要掌握以下几点:
①那里需要绒布
②如何实现同步,代码了解即可
③实现同步之后有什么副作用
问题引出:以卖火车票为例,如果想买火车票,可以去火车站购买或者去各个售票点,但是火车的票数是固定的,如果把各个售票点理解为各个线程的话,那么火车票应该是各个线程所共享的资源。
问题出来了,多个线程之间加入延迟操作,卖出的票数出现负数了
使用同步解决资源共享的问题,可以使用同步代码块或者同步方法来完成。
同步代码块
四级不同的代码块:
①普通代码块:直接定义在方法之中
②构造快:直接定义在类中,优先于构造方法执行,重复调用
③静态块:使用static关键字声明,优先于构造快,只执行一次
④同步代码块:使用synchronized关键字声明
同步的时候必须指明对象,一般情况下使用当前对象,用this关键字表示。
加入同步代码块之后,虽然解决了资源共享问题,但是程序速度下降,比异步操作要慢
同步方法:
2.2死锁
资源共享的时候需要同步操作。
程序中过多的同步会产生死锁。
死锁表示在一般情况下表示就是互相等待,是程序运行的时候出现的一种问题。
三,总结
多个线程在访问同一资源的时候需要使用同步
同步使用synchronized关键字完成,分为同步代码块和同步方法