使用线程同步,Java似乎不是100%准确.此示例中的代码打印一个静态整数的值,该值由每个线程递增.如果输出包含相同的数字,uniq将多次识别它.每个示例都由Makefile脚本运行,以帮助说明问题.每个示例使用不同的同步/锁定方法,但似乎没有一个方法在100%的时间内都能正常工作.大多数复制发生在循环的早期,至少在这个系统上.
Makefile文件:
JAVA=/usr/local/jdk/bin/java
JAVAC=$(JAVA)c
build:
$(JAVAC) Synchron.java
$(JAVAC) SynchronVolatile.java
$(JAVAC) SynchronFinal.java
$(JAVAC) SynchronThis.java
$(JAVAC) SynchronA.java
$(JAVAC) SynchronObj.java
run:
$(JAVA) Synchron | sort | uniq -c | egrep -v '^\s+1\s+' ; /bin/true
$(JAVA) SynchronVolatile | sort | uniq -c | egrep -v '^\s+1\s+' ; /bin/true
$(JAVA) SynchronFinal | sort | uniq -c | egrep -v '^\s+1\s+' ; /bin/true
$(JAVA) SynchronThis | sort | uniq -c | egrep -v '^\s+1\s+' ; /bin/true
$(JAVA) SynchronA | sort | uniq -c | egrep -v …Run Code Online (Sandbox Code Playgroud)