优化线程执行效率
来源:互联网 发布:赵云怎么死的知乎 编辑:程序博客网 时间:2024/06/16 05:54
摘自http://zhmocean.iteye.com/blog/759809
1、 使用实例锁而非类锁。
比如:
public synchronized void foo1(int k){
String key = Integer.toString(k);
String value = key+”value”;
if(null == key){
return;
}else{
maph.put(key, value);
{
}
此时加的是类锁,我们只要改成
public void foo1(int k){
String key = Integer.toString(k);
String value = key+”value”;
if(null == key){
return;
}else{
synchronized(this){
maph.put(key,value);
}
}
}
就可以把时间损耗降低25%。
2、 使用细粒度锁。即,对共享资源加锁而非方法(实质是对象锁)
比如:
public synchronized void addUser1(String u){
users.add(u);
}
public synchronized void addQuery1(String q){
queries.add(q);
}
实质是加了类锁,导致线程等待时间产生无谓的浪费,那么我们可以改成
public void addUser2(String u){
synchronized(users){
users.add(u);
}
}
public void addQuery2(String q){
synchronized(queries){
queries.add(q);
}
}
经过这样优化,时间消耗降低了67%
3、 锁定元素而非集合。
比如:
public synchronized void put1(int index,String k){
share[index] = k;
}
可以改为
public void put1(int index, String k){
synchronized(locks[index%N_LOCKS]){
share[index] = k;
}
}
时间降低66%的损耗
4、使用原子 Atomic 系列类型进行无锁编程。
具体可见 AtomicLongArray 的用法(此用法在 JDK1.5+ 里可用)
问题的关键点就在共享资源的调度和使用,其中一个原则就是,共享资源越少越好,线程间交互越少,效能越高。
- 优化线程执行效率
- 优化ADO的执行效率
- .NET代码执行效率优化
- .NET代码执行效率优化
- ">.NET代码执行效率优化
- ABAP程序执行效率优化
- 多线程和单线程执行效率比较
- 数据库SQL执行效率优化方法整理
- 优化sql语句,提升程序执行效率
- 优化sql语句提高oracle执行效率
- 关于SQL执行效率的优化
- SQL优化语句提升执行效率
- 优化sql语句提高oracle执行效率 .
- 优化innerHTML操作(提高代码执行效率)
- 2014.11.18 java执行效率优化方式
- 优化sql语句执行效率的方法
- mysql执行效率优化注意事项及要点
- MySql批量插入优化Sql执行效率
- Leetcode Problem 汇总二
- Memcached源码分析之状态机(三)
- javascript判断object为空
- Jrebel使用
- Bad Url request handle. 404 500 401 etc. in web.config
- 优化线程执行效率
- SoftReference
- Makefile
- java 中List 集合删除元素
- sftp_put.exp
- MySQL导入和导出sql脚本
- 一种基于迭代与分类识别方法的入门级Python爬虫
- Highcharts使用easyui datagrid的数据画动态统计图
- IE浏览器常见的9个css Bug以及解决办法