HIT 软件构造 并发编程 锁 同步

含义:
使用锁机制,获得对数据的独家访问权限,其他线程被阻塞,不得访问
实现方法:
synchronized (obj) { … } ,其中obj是锁,也可以简单的在函数定义的时候在public和void之间添加一个synchronized关键字
被大括 包围的代码块在执行过程中不会被别的线程的代码块X打断,前提是代码块X也是被synchronized关键字修饰并且使用的锁也是obj
也就是锁互斥原则。
举个例子:

死锁的解决办法

  1. 锁排序
    对所有需要获取的锁进行排序,并保证所有的代码在获取锁的时候遵循这样的顺序
    解释:从上面的例子可以看出,所有的死锁对应的获取锁的顺序肯定是相背的,所以只要要求所有的锁的顺序一致就可以了。
  2. 粗锁定
    也就是不使用this作为锁,而是另外开一个object作为锁,因为你这个锁对别的类是不可见的。

starvation

描述的是其他线程控制锁的时间太长,导致当前线程无法继续进行。

活锁

指的是a走到左边让b过去,b走到右边让a过去,然后就循环了。
对应到实现中,就是要求一个线程能够对另外一个线程的活动做出反应。
跟死锁不一样

java技术(关于wait,notify,notifyall)

  1. 首先是使用条件:必须在同步代码块中使用
  2. wait()方法会将当前线程对资源的控制权交出,然后这个线程就进入了等待池
  3. notify()方法会将上述的线程解救出来,使用方法是在另一个线程中,调用lock.notify(),然后等待池中的一个lock对应的就被解救出来了。
  4. HIT 软件构造 并发编程 锁 同步

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月1日
下一篇 2019年5月1日

相关推荐