日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java sync_Java同步简介 - 加大装益达 - OSCHINA - 中文开源技术交流社区

發布時間:2025/4/16 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java sync_Java同步简介 - 加大装益达 - OSCHINA - 中文开源技术交流社区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接

[TOC]

Java同步

Java中同步一直都是很重要的問題,對于初學者來說也是不太容易能理解的問題。特在此記錄一下有關Java中同步和鎖的知識。主要涉及到同步的概念以及Java中解決的辦法和簡單的例子。有關鎖Lock中的內容不在此做說明。

同步

為什么需要同步

這個問題不難回答。當牽扯到同步問題的時候,就離不開多線程了。簡單舉個例子,桌子上有一臺2016新款MacBook pro,我和女朋友都想要去玩,我們倆同時伸向了那臺電腦,后果可想而知(當然是我地上坐著玩手機去了!),我們倆都在搶那臺電腦,誰也玩不了。這時候該怎么辦?我們會約定好,一人半個小時,我在玩電腦的時候你拿著手機玩……就這樣一人一段時間的玩。分析一下,電腦就是被競爭的資源,我和女朋友是兩個線程,關于怎么玩電腦就需要同步來解決了,要不然不就打起來了么。

同步就是要多個運行的線程在一起良好的工作,在訪問同一個資源時不會造成資源的錯誤或者混亂。

Java中同步的解決辦法

Java中內置了synchronized關鍵字來控制線程的同步。synchronized關鍵字可以修飾方法或者代碼塊,當有一個線程進入到了synchronized方法或者代碼塊中的時候,其他的線程就不能進入到此方法或者代碼塊中,必須等待剛才的線程完成退出synchronized方法或者代碼塊之后,等待的方法才能去執行。就是我女票玩電腦的時候,我就不能玩,必須等著。

synchronized其實就是實現鎖的功能。Java中每個對象都有一個內置鎖,每次需要訪問同步方法或者同步塊的時候,必須獲得相應的鎖。要不然等待的線程怎么能知道這塊代碼是不是被其他線程在用呢。

同步的幾種情況

synchronized修飾一個方法

修飾一個方法時,能夠保證同一時刻最多只有一個線程執行該方法中的代碼。此時鎖的是當前實例對象,如果該對象還有其他的synchronized方法,也不能被其他線程訪問,因為當前對象的鎖只有一個。但是對于該對象其他的非synchronized方法其他線程則可以訪問。

synchronized修飾代碼塊

此時代碼塊應該用synchronized(this)來修飾,鎖的也是當前實例對象,該對象其他的同步方法和同步塊也不能被其他線程訪問。

synchronized修飾靜態方法

靜態方法是屬于類的而不屬于對象的,所以靜態方法的鎖是類對象。一個synchronized靜態方法被訪問時,其他線程不能訪問這個類的所有對象的同步方法。這個鎖是類級別的。

synchronized(.class)修飾的代碼塊

線程進入synchronized(.class)修飾的代碼塊,會將整個類的所有這個synchronized(.class) 同步代碼塊鎖定,其他線程沒有辦法訪問synchronized(.class)修飾的代碼塊。屬于class級別的。但是其他線程可以訪問非靜態的同步方法或者代碼塊。

總結

以上是生活随笔為你收集整理的java sync_Java同步简介 - 加大装益达 - OSCHINA - 中文开源技术交流社区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。