静态锁和实例锁
?
Java中可以对静态方法和实例方法使用synchronized
?
当在静态方法前面加synchronized 表示锁定class , 当多个线程同时调用静态方法时会阻塞
?
当在实例方法前面加synchronized 表示锁定class的单个实例 , 当多个线程同时调用class的实例的实例方法时会阻塞
?
注意:静态方法synchronized 和实例方法synchronized 互不干扰,也就是说当静态方法锁后,不影响实例方法调用,反过来一样
?
?
package com.lottery;public class Test {public static void main(String[] args) {final Lock lock = new Lock();new Thread() {public void run() {Lock.method2();}}.start();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}new Thread() {public void run() {lock.method1();//Lock.method2();}}.start();}}class Lock {public synchronized void method1() {System.out.println("method1 start");try {Thread.sleep(1000 * 10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("method1 end");}public static synchronized void method2() {System.out.println("method2 start");try {Thread.sleep(1000 * 10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("method2 end");}}?