1.加在静态函数上或者加在class对象上,这两者锁住的都是class对象

public synchronized static void test1() {
		for (int i = 0; i < 10; i++) {
			System.out.println(\"test1...\");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public void test4() {
		synchronized (Test.class) {
			for (int i = 0; i < 10; i++) {
				System.out.println(\"test4...\");
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main(String args[]) {
		test1();
		Test t = new Test();
		t.test4();
	}

执行结果

test1...
test1...
test1...
test1...
test1...
test1...
test1...
test1...
test1...
test1...
test4...
test4...
test4...
test4...
test4...
test4...
test4...
test4...
test4...
test4...

2.锁住函数,锁住this,锁住某个对象实例,这三种锁住的都是对象实例

在下面这张情况下,这三者是等价的

public synchronized void test2() {
		for (int i = 0; i < 10; i++) {
			System.out.println(\"test2...\");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void test3() {
		synchronized (this) {
			for (int i = 0; i < 10; i++) {
				System.out.println(\"test3...\");
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}


	public void test5(  o) {
		synchronized (o) {
			for (int i = 0; i < 10; i++) {
				System.out.println(\"test5...\");
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

    public static void main(String args[]) {
		Test t1 = new Test();
		Test t2 = new Test();
		
		t1.test2();
		t1.test3();
		t2.test5(t1);
	}

执行结果如下

test2...
test2...
test2...
test2...
test2...
test2...
test2...
test2...
test2...
test2...
test3...
test3...
test3...
test3...
test3...
test3...
test3...
test3...
test3...
test3...
test5...
test5...
test5...
test5...
test5...
test5...
test5...
test5...
test5...
test5...

 

收藏 打印