zoukankan      html  css  js  c++  java
  • 关于并发

    今天遇到多线程并发访问数据库的问题,思来想去,只好对临界区加锁,通过synchronized关键字。

    问题来了,我改对什么加锁?

    根据实际情况,是想对某个临界区(也就是一段代码)加锁,但是加锁的对象是资源,而不是代码啊。所以考虑将这段代码弄成一个方法,对方法加同步锁。

    可是方法也不是资源啊,对方法加锁的实质是什么呢?其实对方法加锁是对方法所属资源的加锁,如果是静态方法,那么其实是锁了他的类型,如果是普通方法,那其实是锁了类的对象。

    那么,锁住某个对象,能避免并发吗?不难发现,对于非单例的对象,多线程中必定是2个不同的实例,所以锁了也没什么意义。

    但是如果这个类是单例模式,那就有用了,因为每个线程获取的实例是同一个。

    如果不是单例,又要达到这样的效果,那只好为类增加一个静态属性,然后锁住这个静态属性,使得不同实例见能同步

  • 相关阅读:
    LAMP企业架构读写分离
    docker技术入门(2)
    docker技术入门(1)
    终极实验
    java——并查集 UnionFind
    java——字典树 Trie
    java——线段树 SegmentTree
    java——最大堆 MaxHeap
    java——链表映射 LinkedListMap
    java——数据结构
  • 原文地址:https://www.cnblogs.com/glgl2424/p/2889278.html
Copyright © 2011-2022 走看看