Static synchronized Method (二)

2014-11-24 09:49:30 · 作者: · 浏览: 1
37

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);

}

}

}

可以看到两个线程不能同步执行,必须等到第一条线程结束之后才能启动第二条线程。