java多線程鎖的學習總結

    從別人的文章裏偷來一句話,感受蠻經典的:多線程的同步依靠的是鎖機制,java中可經過synchronized關鍵字鎖鎖住共享資源以實現異步多線程的達到同步。 java

    總結起來,要達到同步,咱們要作的就是構造各線程間的共享資源,其中的共享資源能夠對象,也能夠是方法多線程

    學習過程當中整的一個多線程實現同步的Demo: 異步

package com.jd.test.demo;

public class LockDemo {
	public static void main(String[] args) {
		MyRunnerVarLock runnerVarLock = new MyRunnerVarLock(new Integer(0));
		MyRunnerFuncLock runnerFuncLock = new MyRunnerFuncLock();
		MyRunnerNoLock runnerNoLock = new MyRunnerNoLock(); 
		
		// 對共享對象進行加鎖,線程會依次打印0-99的數,每一次運行的結果都同樣
		for(int i = 0; i < 10; i++) {
			Thread thread = new Thread(runnerVarLock);
			thread.start();
		}
		
		// 對共享函數進行加鎖,線程會依次打印0-99的數,每一次運行的結果都同樣
		for(int i = 0; i < 10; i++) {
			Thread thread = new Thread(runnerFuncLock);
			thread.start();
		}
		
		// 未加鎖,會由於線程調用的時序不一樣而發生變化,每一次運行的結果不必定相同
		for(int i = 0; i < 10; i++) {
			Thread thread = new Thread(runnerNoLock);
			thread.start();
		}
	}
}

// 對共享對象進行加鎖
class MyRunnerVarLock implements Runnable {
	private Object lock;

	public MyRunnerVarLock(Object lock) {
		this.lock = lock;
	}

	public void run() {
		synchronized (lock) {
			for (int i = 0; i < 100; i++) {
				System.out.println("Lock: " + i);
			}
		}
	}
}

// 對共享函數進行加鎖
class MyRunnerFuncLock implements Runnable {
	public synchronized void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("Func lock: " + i);
		}
	}
}

// 沒有加鎖
class MyRunnerNoLock implements Runnable {
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("No lock: " + i);
		}
	}
}
    哈哈,有點水,不得深解,能用萬歲^_^!!!!
相關文章
相關標籤/搜索