`
trydofor
  • 浏览: 145672 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

synchronized 处发生了什么

阅读更多
问题
1.为何 map.clear(); 时的输出的毫秒数不连续?
2.在 synchronized (map) 处发生了什么?


代码
public class Test {
	static transient long   currentMs;
	static Map map = new HashMap();
	
	public static void main(String[] args) {
		{
			long start = System.currentTimeMillis();
			int  spans = 1000;
			Map m = new HashMap();
			int count=0;
			while(System.currentTimeMillis() - start < spans) {
				Integer i = new Integer(count); 
				m.put(i,i);
		    	count++;
			}
			long total = System.currentTimeMillis()-start;
			System.out.println("|| SimpleAdd || "+(count/total)+" ||");
		}
		{
			long start = System.currentTimeMillis();
			int  spans = 1000;
			int count=0;
			while(System.currentTimeMillis() - start < spans) {
				make(count);
		    	count++;
			}
			long total = System.currentTimeMillis()-start;
			System.out.println("|| MethodAdd || "+(count/total)+" ||");
		}
	}

	public static void make(int c) {
		synchronized (map) {
			final long nowMs = System.currentTimeMillis();
			if(nowMs >currentMs){
				System.out.println("map.clear()="+nowMs+", map.size()="+map.size());
				map.clear();
				currentMs=nowMs;
			}
			Integer i = new Integer(c);
			map.put(i, i);
		}
	}
}


输出
|| A9ICMaker.make():SingleThread || 1273 ||
clear=1294900633538,count=0
clear=1294900633553,count=7533
clear=1294900633569,count=71077
clear=1294900633584,count=44649
clear=1294900633600,count=60189
clear=1294900633616,count=77277
clear=1294900633631,count=72338
clear=1294900633647,count=60071
clear=1294900633663,count=79539
clear=1294900633678,count=75039
clear=1294900633694,count=55106
clear=1294900633709,count=85094
clear=1294900633725,count=78181
clear=1294900633741,count=57666
clear=1294900633756,count=93585
clear=1294900633772,count=16451
clear=1294900633788,count=88381
clear=1294900633803,count=32323
clear=1294900633819,count=72507
clear=1294900633834,count=57766
clear=1294900633850,count=56261
clear=1294900633866,count=95639
clear=1294900633881,count=15986
clear=1294900633897,count=88842
clear=1294900633913,count=23015
clear=1294900633928,count=81801
clear=1294900633944,count=39540
clear=1294900633959,count=65284
clear=1294900633975,count=71901
clear=1294900633991,count=65975
clear=1294900634006,count=71771
clear=1294900634022,count=60254
clear=1294900634038,count=55864
clear=1294900634053,count=93507
clear=1294900634069,count=19888
clear=1294900634084,count=84916
clear=1294900634100,count=33104
clear=1294900634116,count=71716
clear=1294900634131,count=57352
clear=1294900634147,count=56235
clear=1294900634163,count=96052
clear=1294900634178,count=15489
clear=1294900634194,count=85669
clear=1294900634209,count=93119
clear=1294900634225,count=84102
clear=1294900634241,count=64900
clear=1294900634256,count=75998
clear=1294900634272,count=50408
clear=1294900634288,count=54407
clear=1294900634303,count=92945
clear=1294900634319,count=85162
clear=1294900634334,count=66641
clear=1294900634381,count=69714
clear=1294900634397,count=87046
clear=1294900634413,count=87289
clear=1294900634428,count=83505
clear=1294900634444,count=70047
clear=1294900634459,count=58651
clear=1294900634475,count=85536
clear=1294900634491,count=89269
clear=1294900634506,count=76467
clear=1294900634522,count=55252
|| A9ICMaker.make():SingleThread || 4101 ||

分享到:
评论

相关推荐

    Synchronized_6_pulse_Generator.slx

    有需要2014版本之前的Synchronized 6-Pulse Generator元器件,提供slx文件下载,直接复制过去即可使用。Matlab表示:如果您的旧版型号包含 同步6脉冲发生器模块,它们将继续工作。但是,为获得最佳性能,请在新型号...

    java关键字Synchronized详解

    ava中的关键字synchronized是一种用于实现线程同步的机制。它可以确保在同一时刻,只有一个线程能够访问被synchronized修饰的代码块或方法。这种机制可以有效地避免多线程环境下...这种竞争可能导致锁膨胀现象的发生。

    PHP pthreads v3下同步处理synchronized用法示例

    之所以会用到同步,是因为如果多个线程中对同一个资源进行操作时,会发生混乱。 比如2个线程对变量进行加1操作,第1个线程还没来的及改写数据时,第2个线程就对变量进行操作了,那变量最终的结果就是未知的,这个...

    Java学习题答案

    下面程序运行会发生什么结果?如果有错误,如何改正? (15分) interface A{ int x = 0; } class B{ int x =1; } class C extends B implements A { public void pX(){ System.out....

    danxiangzhengliu.slx

    单项晶闸管整流电路, 交流电源,经整流器降压后,送入整流电路。 脉冲发生器产生同步脉冲控制晶闸管导通。 由于产生的是六脉冲,故需选择两路相位相差180度脉冲控制晶闸管导通。

    TicketWindowRunnable.java

    多线程用synchronized之后会发生只运行一个线程的问题,用了这个方法就解决了

    Java理论与实践:非阻塞算法简介

    Java语言中主要的同步手段就是synchronized关键字,它强制实行互斥,确保执行synchronized块的线程的动作,能够被后来执行受相同锁保护的synchronized块的其他线程看到。在使用得当的时候,内在锁可以让程序做到线程...

    Java常见面试题208道.docx

    150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况? 151.rabbitmq 对集群节点停止顺序有要求吗? 十五、Kafka 152.kafka 可以脱离 zookeeper 单独使用吗?为什么? 153.kafka 有几种数据保留的策略? 154....

    Java进阶教程,面试大全,包罗万象

    synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何检测死锁,怎么预防死锁。 ...

    Java进阶教程,面试大全

    synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何检测死锁,怎么预防死锁。 ...

    超级有影响力霸气的Java面试题大全文档

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    java笔试题大集合及答案(另附各大公司笔试题)

    suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标...

    92道Java多线程与并发面试题含答案(很全)

    并发与并行:并发是指多个任务在逻辑上同时发生,而并行是指多个任务在物理上同时发生(例如在多核处理器上)。 同步(Synchronization):同步是控制多个线程访问共享资源的方式,以防止数据不一致和竞态条件。Java...

    华为java经典面试题大总结

    3 int 和 Integer 有什么区别 4 String 和StringBuffer的区别 5 运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行...

    Java并发编程笔记之ConcurrentHashMap原理探究.docx

    HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占,相当于所有线程进行读写时都去竞争一把锁,导致效率非常低下。ConcurrentHashMap可以做到读取数据不...

    java面试题(线程和JSP及EJB部分).pdf

    用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable 接口 用synchronized 关键字修饰同步方法 反对使用stop(),是因为它不安全。它会解除由...

    基于Java多线程同步的安全性研究

    解决Java多线程同步的方法是在需要同步的方法签名中加入synchronized关键字,使用synchronized对需要进行同步的代码段进行同步,或使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。为解决多个线程对同一...

    最新Java面试宝典pdf版

    16、下面的代码有什么不妥之处? 13 17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可...

    Java面试宝典2010版

    16、下面的代码有什么不妥之处? 17、请说出作用域public,private,protected,以及不写时的区别 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 19、构造器Constructor是否可被...

    Java面试笔试资料大全

    16、下面的代码有什么不妥之处? 13 17、请说出作用域public,private,protected,以及不写时的区别 13 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 19、构造器Constructor是否可...

Global site tag (gtag.js) - Google Analytics