`
w800927
  • 浏览: 119985 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程下锁资源方法调用思路

阅读更多

关于多线程锁资源的性能与安全的新解决思路:如某个方法访问临界方法时,在多线程中调用该方法互不被影响的解决思路:首先:为避免每次调用都初始化对象的耗损,用static方法,不被影响加synchronized关键字,但锁资源将会成为瓶颈 解决思路:根据threadid 个数 初始化相同个数的对象,然后各threadid调用各自持有对象的静态方法,将不会产生。 实用范围:该方法所在的对象不是特别大,只涉及到处理,没有涉及到数据同步的场景之下 这样的问题: http://manecocomph.iteye.com/blog/931545

 

举例:

private static Map<Long, TxDroolsAnalyzeImpl> maps = new HashMap<Long, TxDroolsAnalyzeImpl>();

private static TxDroolsAnalyzeImpl getInstance() {
Long tId = Thread.currentThread().getId();
if (maps.containsKey(tId)) {
return maps.get(tId);
} else {
TxDroolsAnalyzeImpl txDroolsAnalyzeImpl = new TxDroolsAnalyzeImpl();
maps.put(tId, txDroolsAnalyzeImpl);
return txDroolsAnalyzeImpl;

}
}

 

 

ConcurrentLinkedQueue

 

一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许使用 null 元素。

 

需要小心的是,与大多数 collection 不同,size 方法不是 一个固定时间操作。由于这些队列的异步特性,确定当前元素的数量需要遍历这些元素。

 

 

此类及其迭代器实现了 Collection Iterator 接口的所有可选 方法。

 

 

内存一致性效果:当存在其他并发 collection 时,将对象放入 ConcurrentLinkedQueue 之前的线程中的操作 happen-before 随后通过另一线程从 ConcurrentLinkedQueue 访问或移除该元素的操作。

 

 

LinkedBlockingQueue

 

一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。

 

 

可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于 Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

 

 

 

 

分享到:
评论

相关推荐

    Java多线程小结

    ### Java多线程小结 ...但是,多线程编程也面临着诸如死锁、竞态条件等问题,因此需要开发者具备良好的设计思路和扎实的基础知识。掌握多线程的原理和实现机制对于编写高质量的Java应用至关重要。

    posix多线程编程

    POSIX线程库(pthread)为Linux下的多线程编程提供了一套完整的工具集,包括线程创建与管理、线程间同步(如互斥锁和条件变量)、线程特定数据、线程取消与终止等高级功能。掌握这些知识不仅能够帮助开发者构建高...

    pb多线程例子.rar

    开发者认为这个例子很有价值,因为“感觉不错,用着方便”,它提供了一个思路,帮助开发者了解如何在PB环境中利用多线程,这可能会开启更多的开发可能性。尽管PowerBuilder可能在某些方面被认为较旧或有限,但这个...

    7 实验七 实现多线程聊天程序.docx

    在本实验中,我们将探索如何在Linux环境下实现一个多线程聊天程序,这涉及到网络编程和多线程技术的深入理解。首先,我们要了解线程创建和线程同步的基本概念。 线程是操作系统分配CPU时间的基本单位,一个进程中...

    在Delphi中利用多线程实现数据采集的方法.doc

    ### 在Delphi中利用多线程实现数据采集的方法 #### 概述 本文档主要介绍了如何在Delphi环境中使用多线程技术实现数据采集的基本原理与实现步骤。Delphi是一种功能强大的开发工具,广泛应用于Windows应用程序开发。...

    易语言多线程传递多参数源码

    通过学习和参考他们的源码,我们可以了解他们在解决多线程问题时的独特思路和技巧。 至于“content.txt”,这可能是源码的一部分或者相关文档,包含了更具体的实现细节。通常,源代码文件会包含函数定义、线程创建...

    Linux下使用EPoll+队列+多线程的C++实现

    在这个“Linux下使用EPoll+队列+多线程的C++实现”项目中,开发者使用了`epoll`来监听并管理TCP服务器的连接。`epoll`的工作流程大致如下: 1. **创建epoll句柄**:首先,通过`epoll_create()`函数创建一个epoll...

    C#多线程下载

    多线程下载的基本思路是将文件分割成若干个部分,每个部分由一个单独的线程负责下载。这样,多个线程可以并行地从服务端获取数据,显著提高了下载速度,尤其是在网络带宽有限的情况下。在C#中,我们可以使用System....

    Android文件多线程下载

    在Android开发中,文件下载是一项常见的任务,尤其是对于大型应用或者资源更新,多线程下载技术则显得尤为重要。本文将详细解析如何在Android环境中实现文件的多线程下载,包括自定义线程数、断点续传以及下载任务的...

    windows多线程程序设计源代码

    学习和分析这些源代码,开发者可以了解如何在Windows下创建、管理线程,如何处理线程间的通信和同步,如使用临界区、事件、互斥量、信号量等同步机制,以及如何优化多线程程序以提高效率和避免竞态条件。此外,通过...

    多线程面试题及回答

    此外,Lock还可以实现读写锁,即`ReentrantReadWriteLock`,这种锁可以允许多个读线程同时访问资源,但同一时刻只能有一个写线程访问资源,这有助于提高多线程环境下读操作的效率。 - **高效缓存实现:**使用`...

    VC++ 2010 通过Event实现多线程同步

    在编程领域,多线程是提高程序执行效率的重要手段,特别是在Windows环境下,VC++ 2010提供了丰富的工具和API来支持多线程编程。然而,多线程也带来了同步问题,即如何保证多个线程对共享资源的正确访问。在VC++ 2010...

    多线程CSocket

    ### 多线程CSocket详解:MFC下的网络编程实践 在MFC框架下,`CSocket`与`CAsyncSocket`是进行网络通信的重要工具,尤其在开发复杂的客户端/服务器应用时,它们的合理使用至关重要。本文将深入探讨如何在多线程环境...

    MySQL数据库的多线程引擎的实现思路.pdf

    MySQL的多线程引擎通过连接池、线程管理和数据一致性保障等策略,优化了在大数据环境下的性能表现。通过降低耦合度,提高代码复用,使得系统更加灵活,更适应高并发场景。理解并熟练运用这些实现思路和框架,对于...

    c#异步/同步多线程套接字

    在C#编程中,异步和同步多线程套接字是网络通信的重要技术,尤其在构建高性能、高并发的应用程序时。本文将详细讲解这些概念,并基于给定的项目文件进行解析。 首先,让我们理解“同步”和“异步”在套接字编程中的...

    Qtcpserver实现多线程服务器,里面包括单线程普通服务器

    以上就是使用Qtcpserver实现多线程服务器的基本思路。多线程服务器能够有效地提升服务器的并发能力,但同时也增加了编程复杂性,需要考虑线程同步、资源管理等问题。而在选择单线程还是多线程模式时,应根据具体应用...

    JAVA基于多线程的赛马游戏

    在Java编程语言中,多线程是实现并发...总之,基于Java的多线程赛马游戏展示了并发编程的魅力,同时也提供了实践线程同步、通信以及资源管理的绝佳平台。通过这样的项目,开发者可以深化对多线程的理解,提高编程技能。

    MySQL数据库的多线程引擎的实现思路 (1).pdf

    相比之下,多线程引擎允许并发执行多个任务,能够更有效地利用系统资源,特别是在需要处理大量并发查询的场景下。 多线程引擎的设计思路通常涉及创建连接池,以避免线程之间的竞争和资源浪费。通过数据库连接池,...

    Java多线程批量数据导入的方法详解

    然后,使用线程池来调用模拟服务的写入方法,实现多线程批量数据导入。 在模拟服务中,定义了读取数据和写入数据的接口。读取数据的接口可以批量读取数据,而写入数据的接口可以模拟写入速度慢的过程。 在批量数据...

Global site tag (gtag.js) - Google Analytics