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
今日推荐
周排行