test0:Thread-038
test0:Thread-039
test0:Thread-040
test0:Thread-041
test0:Thread-042
test0:Thread-043
test0:Thread-044
test0:Thread-045
test0:Thread-046
test0:Thread-047
test0:Thread-048
test0:Thread-049
test0:Thread-050
test0:Thread-051
test0:Thread-052
test0:Thread-053
test0:Thread-054
test0:Thread-055
test0:Thread-056
test0:Thread-057
test0:Thread-058
test0:Thread-059
test0:Thread-060
test0:Thread-061
test0:Thread-062
test0:Thread-063
test0:Thread-064
test0:Thread-065
test0:Thread-066
test0:Thread-067
test0:Thread-068
test0:Thread-069
test0:Thread-070
test0:Thread-071
test0:Thread-072
test0:Thread-073
test0:Thread-074
test0:Thread-075
test0:Thread-076
test0:Thread-077
test1:Thread-169
test0:Thread-078
test0:Thread-079
test1:Thread-170
test1:Thread-171
test0:Thread-080
test1:Thread-172
test1:Thread-173
test1:Thread-174
test1:Thread-175
test1:Thread-176
test1:Thread-177
test0:Thread-081
test1:Thread-178
test0:Thread-082
test1:Thread-179
test0:Thread-083
test1:Thread-180
test0:Thread-084
test1:Thread-181
test0:Thread-085
test1:Thread-182
test0:Thread-086
test1:Thread-183
test0:Thread-087
test1:Thread-184
test0:Thread-088
test1:Thread-185
test1:Thread-186
test0:Thread-089
test0:Thread-090
test1:Thread-187
test0:Thread-091
test1:Thread-188
test0:Thread-092
test1:Thread-189
test0:Thread-093
test1:Thread-190
test0:Thread-094
test1:Thread-191
test0:Thread-095
test1:Thread-192
test0:Thread-096
test1:Thread-193
test0:Thread-097
test1:Thread-194
test0:Thread-098
test1:Thread-195
test0:Thread-099
test1:Thread-196
test1:Thread-197
test1:Thread-198
test1:Thread-199
静态同步方法和以this为同步监视器的同步代码块同时执行,当第一条线程进入同步代码块执行之后,该线程获得了对同步监视器的锁定。第二条线程尝试进入同步代码块执行,进入同步代码块之前,该线程必须获得对this引用(也就是ss变量所引用的对象)的锁定。因为第一条线程锁定的是SynchronizedStatic类,而不是ss变量所引用的对象,所以第二条线程完全可以获得对ss变量所引用的对象的锁定,因此系统可以切换到执行第二条线程。以下把同不快变为同步监视SynchronizedStatic类,
public void test1(){
synchronized(SynchronizedStatic.class){
for(int i=0;i<100;i++){
System.out.println("test1:"+Thread.currentThread().getName()+""+i);
}
}
}
可以看到两个线程不能同步执行,必须等到第一条线程结束之后才能启动第二条线程。