從別人的文章裏偷來一句話,感受蠻經典的:多線程的同步依靠的是鎖機制,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); } } }哈哈,有點水,不得深解,能用萬歲^_^!!!!