Java並發與同步,Java並發同步

來源:互聯網
上載者:User

Java並發與同步,Java並發同步

Java中並發的形式無非是多線程和多進程兩種形式。這兩種形式都是可以利用多核來發揮計算能力的。

先說並發:

多進程意味著同時運行多個JVM,這個代價通常比多線程高,每個JVM都有自己的堆棧、都要分別載入各自的類。但是多進程的好處是“隔離性”更好,一個JVM中的程式在運行時發生故障不會對其他JVM產生很大的影響。而在多線程的情況下,一些致命錯誤可能導致整個JVM掛掉,禍及全體。多線程可以方便地共用記憶體中的內容,這很方便但有時候也會造成混亂,要小心才是。

在說同步:

在Java的線程之間實現同步是很簡單的,用synchronized預就可以實現,再不濟就用java.util.concurrent.locks下提供的鎖。要注意的是加鎖的域或者對象是否正確,以及wait()等操作是會釋放synchronized鎖的。

而進程間的同步就困難一些了,因為進程之間沒有了synchronized這樣的機制來保證一個程式段或者一個對象被串列執行和訪問。一個進程在執行時,沒法預支在執行當前指令和執行下一條指令之間的一刹那會發生什麼。比如你建立了一個檔案:

File file = new File("123");if (file.exists())   // do something on the file

看似你是檢查檔案已存在,然後做了一些讀寫之類的操作,萬無一失的樣子。但實際上,在執行完exists()方法返回true之後的那一刹那,這個檔案可能就被刪除或者重新命名了。

對於進程之外的很多資源,都存在這樣的情況。這就需要通過檔案鎖之類的機制來保證正確的資源共用。可以通過作業系統API實現,也可以利用jdk提供的一些API,例如:

http://www.concretepage.com/java/example-filelock-java-nio-channels

https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.