线程--同步与死锁

来源:互联网 发布:自学云计算 编辑:程序博客网 时间:2024/05/22 17:37

一,本章目标

①了解线程同步的作用

②了解同步代码块及同步方法的作用

③了解死锁的产生



二,具体内容

说明:在多线程的开发中,同步与死锁的概念是非常重要的,一定要掌握以下几点:

①那里需要绒布

②如何实现同步,代码了解即可

③实现同步之后有什么副作用


问题引出:以卖火车票为例,如果想买火车票,可以去火车站购买或者去各个售票点,但是火车的票数是固定的,如果把各个售票点理解为各个线程的话,那么火车票应该是各个线程所共享的资源。


问题出来了,多个线程之间加入延迟操作,卖出的票数出现负数了



使用同步解决资源共享的问题,可以使用同步代码块或者同步方法来完成。


同步代码块

四级不同的代码块:

①普通代码块:直接定义在方法之中

②构造快:直接定义在类中,优先于构造方法执行,重复调用

③静态块:使用static关键字声明,优先于构造快,只执行一次

④同步代码块:使用synchronized关键字声明


同步的时候必须指明对象,一般情况下使用当前对象,用this关键字表示。


加入同步代码块之后,虽然解决了资源共享问题,但是程序速度下降,比异步操作要慢


同步方法:




2.2死锁

资源共享的时候需要同步操作。

程序中过多的同步会产生死锁。


死锁表示在一般情况下表示就是互相等待,是程序运行的时候出现的一种问题。





三,总结 

多个线程在访问同一资源的时候需要使用同步

同步使用synchronized关键字完成,分为同步代码块和同步方法