package concurrencyTest;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.hama.graph.GraphJobMessage;
public class ConcurrencyReadTest {
/**
* @param args
*/
public static void main(String[] args) {
ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<Integer, Integer>() ;
for(int i=0;i<100000 ; i++)
map.put(i, i+111111) ;
long start = System.currentTimeMillis() ;
Thread t1 = new Thread(new Worker(map)) ;
Thread t2 = new Thread(new Worker(map)) ;
t1.start();
t2.start();
try {
t1.join() ;
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Read last : " + (System.currentTimeMillis() - start) + " ms");
}
}
class Worker implements Runnable {
ConcurrentHashMap<Integer, Integer> sharemap ;
public static Object mutex = new Object() ;
public Worker(ConcurrentHashMap<Integer, Integer> map) {
sharemap = map ;
}
@Override
public void run() {
it = sharemap.values().iterator();
Integer i = poll();
while(i!=null) {
int k = i ;
i = poll() ;
}
}
Iterator<Integer> it;
public Integer poll() {
synchronized (mutex) {
if (sharemap.size() > 0 && it!=null && it.hasNext()) {
Integer m = it.next();
it.remove();
return m;
} else {
return null;
}
}
}
}
顺序:
46
46
47
并发
63
78
63
增大到100万条数据:
并发
312
312
327
顺序
188
187
187
可见锁对性能影响之大!
分享到:
相关推荐
基于承诺的互斥锁允许顺序执行相同的异步操作。 一个典型的用例示例是检查资源是否存在,并作为原子异步操作读取/创建资源。 互斥(mutex)JavaScript的互斥(mutex)对象。 动机API配置用法示例图像服务器示例相关...
访问互斥锁,当得到互斥锁且缓冲区非满时,跳出while循环,开始产生新数据,并把数据存放于Buffer缓冲区中,当数据存放结束则结束临界区;接着唤醒消费者线程;ci消费者访问临界区,得到权限访问缓冲区,如果缓冲区...
读写锁 写锁可防止所有其他写或读 读锁只能阻止写操作 基于! 算法 写锁定请求被放入队列并按顺序分发。 读取锁定请求也被放入队列中-但是,当给出一个读取锁定时,队列中的所有读取请求会立即发送-一旦它们全部...
读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....
实例151 顺序读取文件 实例152 制作日志文件 5.7 文件管理 实例153 分类整理磁盘文件 实例154 计算机磁盘空间报警程序 实例155 批量改变指定文件的属性 5.8 加密与解密 实例156 文件的加密与解密 实例157 ...
实例151 顺序读取文件 实例152 制作日志文件 5.7 文件管理 实例153 分类整理磁盘文件 实例154 计算机磁盘空间报警程序 实例155 批量改变指定文件的属性 5.8 加密与解密 实例156 文件的加密与解密 实例157 ...
cc实例149 修改文件属性 cc实例150 修改文件及目录的名称 5.6 文件的读取与保存 cc实例151 顺序读取文件 cc实例152 制作日志文件 5.7 文件管理 cc实例153 分类整理磁盘文件 cc实例154 计算机磁盘空间...
cc实例151 顺序读取文件 cc实例152 制作日志文件 5.7 文件管理 cc实例153 分类整理磁盘文件 cc实例154 计算机磁盘空间报警程序 cc实例155 批量改变指定文件的属性 5.8 加密与解密...
cc实例151 顺序读取文件 cc实例152 制作日志文件 5.7 文件管理 cc实例153 分类整理磁盘文件 cc实例154 计算机磁盘空间报警程序 cc实例155 批量改变指定文件的属性 5.8 加密与解密...
5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. ...
又称文件的存储结构,是指文件在外存上的存储组织形式,是与存储介质的存储性能有关; 空闲空间的管理方法主要有:空闲表法、空闲(自由)链表法、成组链接法 4、文件目录 (1)文件目录分类:一级...
实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机...
实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3...
实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 ...
实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 ...
实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3...
介绍了一种常用的驱动程序编写方法,该方法允许在编写驱动程序时忽略特定于平台的问题,如字节存储顺序(endianness)和数据排序等。 其他主题包括:强化Solaris驱动程序;电源管理;驱动程序自动配置;程控I/O;直接...