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

关于多线程锁资源的性能与安全的新解决思路:如某个方法访问临界方法时,在多线程中调用该方法互不被影响的解决思路:首先:为避免每次调用都初始化对象的耗损,用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。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值