1 public class SynchronizedTest {
2 static int k;
3
4 public synchronized void synA() {
5 for (int i = 0; i < 10000; i++) {
6 k++;
7 }
8 }
9
10 public synchronized void synB() {
11 for (int i = 0; i < 10000; i++) {
12 k++;
13 }
14 }
15
16 public static synchronized void csynA() {
17 for (int i = 0; i < 10000; i++) {
18 k++;
19 }
20 }
21
22 public static synchronized void csynB() {
23 for (int i = 0; i < 10000; i++) {
24 k++;
25 }
26 }
27
28 public static void main(String[] args) throws InterruptedException {
29 for (int i = 0; i < 20; i++) {
30 SynchronizedTest st = new SynchronizedTest();
31 SynchronizedTest st2 = new SynchronizedTest();
32 Thread t1 = new Thread(new Runnable() {
33 @Override
34 public void run() {
35 st.synA();
36 }
37 });
38 Thread t2 = new Thread(new Runnable() {
39 @Override
40 public void run() {
41 st2.synA();
42 }
43 });
44 t1.start();
45 t2.start();
46 t1.join();
47 t2.join();
48 System.out.println(st.k);
49 }
50
51 }
52
53 }
54 /*
55 st.synA() st.synB() 400000 同步有效 一个对象对应一把锁
56 st.synA() st.csynA() 365827 同步无效 一个线程可以同时获得对象锁和类锁
57
58 st.synA() st2.synA() 364182 同步无效 多个对象对应多把锁
59 st.csynA() st2.csynB() 400000 同步有效 类锁只有一个
60 */