对象锁和类锁

 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  */

猜你喜欢

转载自www.cnblogs.com/sakura1027/p/9188196.html