`
cloudeagle_bupt
  • 浏览: 538904 次
文章分类
社区版块
存档分类
最新评论

互斥锁读取与顺序读取性能比较

 
阅读更多
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


可见锁对性能影响之大!


分享到:
评论

相关推荐

    JavaScript的互斥(mutex)对象。-JavaScript开发

    基于承诺的互斥锁允许顺序执行相同的异步操作。 一个典型的用例示例是检查资源是否存在,并作为原子异步操作读取/创建资源。 互斥(mutex)JavaScript的互斥(mutex)对象。 动机API配置用法示例图像服务器示例相关...

    生产者消费者问题算法的实现

    访问互斥锁,当得到互斥锁且缓冲区非满时,跳出while循环,开始产生新数据,并把数据存放于Buffer缓冲区中,当数据存放结束则结束临界区;接着唤醒消费者线程;ci消费者访问临界区,得到权限访问缓冲区,如果缓冲区...

    read-write-lock:读与写互斥,写与所有事物互斥

    读写锁 写锁可防止所有其他写或读 读锁只能阻止写操作 基于! 算法 写锁定请求被放入队列并按顺序分发。 读取锁定请求也被放入队列中-但是,当给出一个读取锁定时,队列中的所有读取请求会立即发送-一旦它们全部...

    java jdk实列宝典 光盘源代码

    读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例151 顺序读取文件 实例152 制作日志文件 5.7 文件管理 实例153 分类整理磁盘文件 实例154 计算机磁盘空间报警程序 实例155 批量改变指定文件的属性 5.8 加密与解密 实例156 文件的加密与解密 实例157 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例151 顺序读取文件 实例152 制作日志文件 5.7 文件管理 实例153 分类整理磁盘文件 实例154 计算机磁盘空间报警程序 实例155 批量改变指定文件的属性 5.8 加密与解密 实例156 文件的加密与解密 实例157 ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    cc实例149 修改文件属性 cc实例150 修改文件及目录的名称 5.6 文件的读取与保存 cc实例151 顺序读取文件 cc实例152 制作日志文件 5.7 文件管理 cc实例153 分类整理磁盘文件 cc实例154 计算机磁盘空间...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例151 顺序读取文件   cc实例152 制作日志文件   5.7 文件管理   cc实例153 分类整理磁盘文件   cc实例154 计算机磁盘空间报警程序   cc实例155 批量改变指定文件的属性   5.8 加密与解密...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例151 顺序读取文件   cc实例152 制作日志文件   5.7 文件管理   cc实例153 分类整理磁盘文件   cc实例154 计算机磁盘空间报警程序   cc实例155 批量改变指定文件的属性   5.8 加密与解密...

    Java JDK实例宝典

    5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. ...

    《计算机操作系统》期末复习指导

    又称文件的存储结构,是指文件在外存上的存储组织形式,是与存储介质的存储性能有关; 空闲空间的管理方法主要有:空闲表法、空闲(自由)链表法、成组链接法 4、文件目录 (1)文件目录分类:一级...

    Java范例开发大全 (源程序)

     实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 读取jar包文件 215  实例145 文件的加密/解密操作 217  实例146 复制图片 219  实例147 随机...

    java范例开发大全(pdf&源码)

    实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3...

    java范例开发大全源代码

     实例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类文件 ...

    java范例开发大全

    实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3...

    编写设备驱动程序

    介绍了一种常用的驱动程序编写方法,该方法允许在编写驱动程序时忽略特定于平台的问题,如字节存储顺序(endianness)和数据排序等。 其他主题包括:强化Solaris驱动程序;电源管理;驱动程序自动配置;程控I/O;直接...

Global site tag (gtag.js) - Google Analytics