一个学习多线程过程中遇到的奇怪问题 多线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个应该是多线程访问操作同一个资源test.getModel().a,涉及到线程同步问题 java中的++操作不是线程安全的,你要加同步机制。简单一点的就把int a=0---》改成:AtomicInteger a = new AtomicInteger(0);a.getAndIncrement();//以原子方式将当前值加 1,返回当前值 添加同步互斥看看。你的hashCode为什么没打印出来啊? 这主要是线程同步的问题 , 考虑synchronized 关键字 的运用吧 hashCode为什么没打印出来啊? 额,添加互斥肯定就没有问题了,我主要是好奇为什么同样有出现未同步的问题,但是两种情况的结果会有这么大的差别。至于hashCode不好意思,我传代码的时候做了点修改,把hashcode去掉了,这里是没有问题的~ 1.我试了下,设成1秒问题依然在2.请问你觉得是时钟的问题,能不能帮忙解释下具体是怎么从时钟不精确导致结果差异的。谢谢~Thread.sleep()的文档上有注释的,你可以看看。写个例子,你运行一下看看你电脑的时钟精度,反正我每次都不会正好50的public static void main(String[] args) throws InterruptedException { int count = 0; while(count ++ < 30){ long start = System.nanoTime(); Thread.sleep(50); long end = System.nanoTime(); System.out.println((end-start) / 1000000.0); } } 1.我试了下,设成1秒问题依然在2.请问你觉得是时钟的问题,能不能帮忙解释下具体是怎么从时钟不精确导致结果差异的。谢谢~Thread.sleep()的文档上有注释的,你可以看看。写个例子,你运行一下看看你电脑的时钟精度,反正我每次都不会正好50的public static void main(String[] args) throws InterruptedException { int count = 0; while(count ++ < 30){ long start = System.nanoTime(); Thread.sleep(50); long end = System.nanoTime(); System.out.println((end-start) / 1000000.0); } }额,可能还是我的问题表述不够清楚哈。我的意思是:对,时钟精度会导致每次sleep()的时间不是精确的50ms或者1000ms或者其他时间长度。这个是必然的,但是——为什么这样的误差会导致上面结果输出会有如此大的差异呢? 亲,这个跟你的机器和JVM的运转有关系,首先,在涉及多线程的时候一定要注意对临界资源的访问,另外,多个线程对同一资源的操作具有太多的不确定性,不论它与你想要的结果又多大的差距,最终的结果肯定不能使人满意 package com.sun.java.swing.plaf.nimbus does not exist 请提供一道接口的题目及代码 java socket inputstream 的阻塞问题 菜鸟提问:数组是对象么? 我的csdn的bolg被停了! 如何用java对文本文件进行筛选式修改?具体内容见文章,谢谢! 多线程优先级问题 为什么是最小化哦显示???? CLASSPATH的問題 菜鸟学JAVA问题之二 maven打包别人的 jar 到自己的 war 里 IO流同时读N个文件并且是读一行对比一行的 感觉有点无从下手
简单一点的就把
int a=0---》改成:AtomicInteger a = new AtomicInteger(0);
a.getAndIncrement();//以原子方式将当前值加 1,返回当前值
你的hashCode为什么没打印出来啊?
2.请问你觉得是时钟的问题,能不能帮忙解释下具体是怎么从时钟不精确导致结果差异的。谢谢~Thread.sleep()的文档上有注释的,你可以看看。
写个例子,你运行一下看看你电脑的时钟精度,反正我每次都不会正好50的public static void main(String[] args) throws InterruptedException {
int count = 0;
while(count ++ < 30){
long start = System.nanoTime();
Thread.sleep(50);
long end = System.nanoTime();
System.out.println((end-start) / 1000000.0);
}
}
2.请问你觉得是时钟的问题,能不能帮忙解释下具体是怎么从时钟不精确导致结果差异的。谢谢~Thread.sleep()的文档上有注释的,你可以看看。
写个例子,你运行一下看看你电脑的时钟精度,反正我每次都不会正好50的public static void main(String[] args) throws InterruptedException {
int count = 0;
while(count ++ < 30){
long start = System.nanoTime();
Thread.sleep(50);
long end = System.nanoTime();
System.out.println((end-start) / 1000000.0);
}
}
额,可能还是我的问题表述不够清楚哈。我的意思是:对,时钟精度会导致每次sleep()的时间不是精确的50ms或者1000ms或者其他时间长度。这个是必然的,但是——为什么这样的误差会导致上面结果输出会有如此大的差异呢?