咱們在共享咱們的數據的時候必須要考慮到安全的成績。 但願你們有所後收穫。 咱們能夠在計算機上運轉各類計算機軟件程序。 每個運轉的程序可能包括多個獨立運轉的線程(Thread)。 線程有可能和其餘線程共享一些資源, 數據庫等。 當多個Java線程同步鎖同時讀寫同一份共享資源的時候, 可能會惹起抵觸。 這時候, 咱們需求引入線程「同步」機制, 不能一窩蜂擠上去搶做一團。 同步這個詞是從英文synchronize(使同時發生)翻譯過來的。 我也不明白爲何要用這個很容易惹起曲解的詞。 咱們也就只好這麼將就。 實際上是「排隊」:幾個線程之間要排隊, 一個一個對共享資源進行操做, 而不是同時進行操做。 需求緊緊記住的第一點是:線程同步就是線程排隊。 同步就是排隊。 線程同步的目的就是避免線程「同步」執行。 關於線程同步, 需求緊緊記住的第二點是「共享」這兩個字。 只要共享資源的讀寫訪問才需求同步。 需求緊緊記住的第三點是, 這樣的狀況下, 線程之間就需求同步。 關於線程同步, 只需這些線程的代碼訪問同一份可變的共享資源, 這些線程之間就需求同步。 上面舉幾個例子。 有兩個推銷員, 寫報告。 他們可能買到異樣種類的樣品, 他們之間沒有任何共享資源。 因此, 他們能夠各自進行本身的任務, 這兩個推銷員就至關於兩個Java線程同步鎖;兩個推銷員遵循相同的任務步驟, 上面給這兩個推銷員添加一個任務步驟。 推銷員需求根據公司的「公告欄」上面發佈的信息, 安排本身的任務計劃。 這一點成績都沒有。 這兩個推銷員誰都不會去修改公告欄上寫的信息。 上面添加一個角色。 一個辦公室行政人員這個時候, 也走到了公告欄前面, 預備修改公告欄上的信息。 兩個推銷員這個時候, 這兩個推銷員就必須等待行政人員完成修改以後, 才能觀看修改後的信息。 若是行政人員抵達的時候, 兩個推銷員已經在觀看公告欄了。 那麼行政人員需求等待兩個推銷員把之後信息記錄下來以後, 才能夠寫上新的信息。 上述這兩種狀況, 由於其中一個線程(行政人員)修改了共享資源(公告欄)。 並且咱們能夠看到, 行政人員的任務流程和推銷員的任務流程(執行代碼)徹底不一樣, 因此他們之間需求同步。 線程同步的基本完成思路仍是比較容易理解的。 咱們能夠給共享資源加一把鎖, 這把鎖只要一把鑰匙。 生活中, 每一個儲物箱都有一把鎖, 一把鑰匙。 人們能夠運用那些帶有鑰匙的儲物箱, 把儲物箱鎖上, 而後把鑰匙拿走。 該儲物箱就被鎖住了, 真實的儲物箱鑰匙是能夠被人拿走複製的, 因此不要把貴重物品放在超市的儲物箱裏面。 因而不少超市都採用了電子密碼鎖。 還有一個嚴峻的成績沒有處理, 這個同步鎖應該加在哪裏?數據庫