对象锁和类锁

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

 

全部评论

相关推荐

喜欢喜欢喜欢:这是我见过最长最臭的简历
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务