1.悲觀鎖是當線程拿到資源時,就對資源上鎖,並在提交后,才釋放鎖資源,其他線程才能使用資源。
2.樂觀鎖是當線程拿到資源時,上樂觀鎖,在提交之前,其他的鎖也可以操作這個資源,當有沖突的時候,並發機制會保留前一個提交,打回后一個提交,讓后一個線程重新獲取資源后,再操作,然后提交。和git上傳代碼一樣,兩個線程都不是直接獲取資源本身,而是先獲取資源的兩個copy版本,然后在這兩個copy版本上修改。
3.悲觀鎖和樂觀鎖在並發量低的時候,性能差不多,但是在並發量高的時候, 樂觀鎖的性能遠遠優於悲觀鎖。
4.我們常用的synchronized是悲觀鎖,lock是樂觀鎖 。他們之間的區別詳見於Java同步鎖——lock與synchronized 的區別【轉】;
5.還有一個樂觀鎖的例子 https://www.cnblogs.com/darrenqiao/p/9211447.html