爱问知识人 爱问教育 医院库

什么是多线程编程的设计模式临界区模式?

首页

什么是多线程编程的设计模式临界区模式?

什么是多线程编程的设计模式临界区模式?

提交回答

全部答案

    2018-03-27 05:37:55
  •   对于双检锁,其实有多种不同的用法,有很多种用法是无论如何不会出现问题的。我最初用双检锁来获取jndi对象时,立即有人告诉我双检锁是不安全的,我笑着告诉他:是否安全我比你更有把握。static DataSource ds = null;public static DataSource getDataSource(){ if(ds == null){
    synchronized(this。
      getClass()){ if(ds == null) ds = xxx; } } return ds;}这样的DCL有什么安全问题呢?它仅仅是为了不做重复的劳动。一是ds本身是已经存在的对象,不是动态构造的,二是即使多次获取它也还是同一引用。
      这里做的工作仅仅是不想让另一个线程多做在JNDI上再查找一次的工作,因为查找本身是耗时的,与其让另一个线程再查找还不如把它阻塞在synchronized外面什么也不做。事实上即使是再查找一次两次获得的还是相同的引用,而且是已经构造好,不存在初始化问题的对象。
      DCL会有什么安全问题?所以不要一看到双检锁就认为它有安全问题。有些时候它完全可以非常好地工作。只是你要理解它的安全问题到底在哪儿?DCL到底有什么问题?DCL的安全性最初被公开的时候在2001年JavaWorld。其实那个例子在那个时候已经是错误的。
      影响了后面几代人都跟着错误。有时候我甚至不敢相信一些非常简单的问题因为放在权威的地方就没有人敢去责疑。最初的问题提出者在这儿:http://www。javaworld。com/javaworld/jw-02-2001/jw-0209-double。
      html例子是:class SomeClass { private Resource resource = null; public Resource getResource() { if (resource == null) { synchronized { if (resource == null) resource = new Resource(); } } return resource; }}。
      

    为***

    2018-03-27 05:37:55

类似问题

换一换
  • 系统软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):