Java多線程初學者指南(12):使用Synchronized塊同步變量
posted @ 2009-03-22 21:26 銀河使者 閱讀(7324) | 評論 (4) 編輯
隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
|
多線程Java多線程初學者指南(12):使用Synchronized塊同步變量
摘要: 我們可以通過synchronized塊來同步特定的靜態或非靜態方法。要想實現這種需求必須為這些特性的方法定義一個類變量,然后將這些方法的代碼用synchronized塊括起來,并將這個類變量作為參數傳入synchronized塊。在使用synchronized塊時應注意,synchronized塊只能使用對象作為它的參數。如果是簡單類型的變量(如int、char、boolean等),不能使用synchronized來同步。 閱讀全文
posted @ 2009-03-22 21:26 銀河使者 閱讀(7324) | 評論 (4) 編輯 Java多線程初學者指南(11):使用Synchronized塊同步方法
摘要: synchronized關鍵字有兩種用法。第一種就是在《使用Synchronized關鍵字同步類方法》一文中所介紹的直接用在方法的定義中。另外一種就是synchronized塊。我們不僅可以通過synchronized塊來同步一個對象變量。也可以使用synchronized塊來同步類中的靜態方法和非靜態方法。 閱讀全文
posted @ 2009-03-22 21:15 銀河使者 閱讀(11343) | 評論 (1) 編輯 Java多線程初學者指南(10):使用Synchronized關鍵字同步類方法
摘要: 要想解決“臟數據”的問題,最簡單的方法就是使用synchronized關鍵字來使run方法同步。雖然可以使用synchronized來定義方法,但synchronized并不屬于方法定義的一部分,因此,synchronized關鍵字不能被繼承。如果在父類中的某個方法使用了synchronized關鍵字,而在子類中覆蓋了這個方法,在子類中的這個方法默認情況下并不是同步的,而必須顯式地在子類的這個方法中加上synchronized關鍵字才可以。當然,還可以在子類方法中調用父類中相應的方法,這樣雖然子類中的方法不是同步的,但子類調用了父類的同步方法,因此,子類的方法也就相當于同步了。 閱讀全文
posted @ 2009-03-20 13:05 銀河使者 閱讀(9744) | 評論 (4) 編輯 Java多線程初學者指南(9):為什么要進行數據同步
摘要: Java中的變量分為兩類:局部變量和類變量。局部變量是指在方法內定義的變量,如在run方法中定義的變量。對于這些變量來說,并不存在線程之間共享的問題。因此,它們不需要進行數據同步。類變量是在類中定義的變量,作用域是整個類。這類變量可以被多個線程共享。因此,我們需要對這類變量進行數據同步。數據同步就是指在同一時間,只能由一個線程來訪問被同步的類變量,當前線程訪問完這些變量后,其他線程才能繼續訪問。這里說的訪問是指有寫操作的訪問,如果所有訪問類變量的線程都是讀操作,一般是不需要數據同步的。 閱讀全文
posted @ 2009-03-19 13:23 銀河使者 閱讀(4955) | 評論 (1) 編輯 Java多線程初學者指南(8):從線程返回數據的兩種方法
摘要: 從線程中返回數據和向線程傳遞數據類似。也可以通過類成員以及回調函數來返回數據。但類成員在返回數據和傳遞數據時有一些區別,下面讓我們來看看它們區別在哪。 閱讀全文
posted @ 2009-03-19 13:02 銀河使者 閱讀(6889) | 評論 (0) 編輯 Java多線程初學者指南(7):向線程傳遞數據的三種方法
摘要: 在傳統的同步開發模式下,當我們調用一個函數時,通過這個函數的參數將數據傳入,并通過這個函數的返回值來返回最終的計算結果。但在多線程的異步開發模式下,數據的傳遞和返回和同步開發模式有很大的區別。由于線程的運行和結束是不可預料的,因此,在傳遞和返回數據時就無法象函數一樣通過函數參數和return語句來返回數據。本文就以上原因介紹了幾種用于向線程傳遞數據的方法,在下一篇文章中將介紹從線程中返回數據的方法。 閱讀全文
posted @ 2009-03-16 23:18 銀河使者 閱讀(15840) | 評論 (2) 編輯 Java多線程初學者指南(6):慎重使用volatile關鍵字
摘要: volatile關鍵字相信了解Java多線程的讀者都很清楚它的作用。volatile關鍵字用于聲明簡單類型變量,如int、float、boolean等數據類型。如果這些簡單數據類型聲明為volatile,對它們的操作就會變成原子級別的。不過在使用volatile關鍵字時也要慎重,并不是只要簡單類型變量使用volatile修飾,對這個變量的所有操作都是原來操作,當變量的值由自身的上一個決定時,如n=n+1、n++等,volatile關鍵字將失效,只有當變量的值和自身上一個值無關時對該變量的操作才是原子級別的,如n = m + 1,這個就是原級別的。所以在使用volatile關鍵時一定要謹慎,如果自己沒有把握,可以使用synchronized來代替volatile。 閱讀全文
posted @ 2009-03-14 16:44 銀河使者 閱讀(9403) | 評論 (10) 編輯 Java多線程初學者指南(5):join方法的使用
摘要: 在上面的例子中多次使用到了Thread類的join方法。我想大家可能已經猜出來join方法的功能是什么了。對,join方法的功能就是使異步執行的線程變成同步執行。也就是說,當調用線程實例的start方法后,這個方法會立即返回,如果在調用start方法后后需要使用一個由這個線程計算得到的值,就必須使用join方法。如果不使用join方法,就不能保證當執行到start方法后面的某條語句時,這個線程一定會執行完。而使用join方法后,直到這個線程退出,程序才會往下執行。 閱讀全文
posted @ 2009-03-12 09:07 銀河使者 閱讀(5985) | 評論 (14) 編輯 Java多線程初學者指南(4):線程的生命周期
摘要: 與人有生老病死一樣,線程也同樣要經歷開始(等待)、運行、掛起和停止四種不同的狀態。這四種狀態都可以通過Thread類中的方法進行控制。 閱讀全文
posted @ 2009-03-11 12:15 銀河使者 閱讀(8270) | 評論 (3) 編輯 Java多線程初學者指南(3):使用Runnable接口創建線程
摘要: 實現Runnable接口的類必須使用Thread類的實例才能創建線程。通過Runnable接口創建線程分為兩步:1. 將實現Runnable接口的類實例化。2. 建立一個Thread對象,并將第一步實例化后的對象作為參數傳入Thread類的構造方法。最后通過Thread類的start方法建立線程。 閱讀全文
posted @ 2009-03-10 11:56 銀河使者 閱讀(5873) | 評論 (0) 編輯 Java多線程初學者指南(2):用Thread類創建線程
摘要: 一個普通的Java類只要從Thread類繼承,就可以成為一個線程類。并可通過Thread類的start方法來執行線程代碼。雖然Thread類的子類可以直接實例化,但在子類中必須要覆蓋Thread類的run方法才能真正運行線程的代碼。 閱讀全文
posted @ 2009-03-07 14:06 銀河使者 閱讀(6556) | 評論 (5) 編輯 Java多線程初學者指南(1):線程簡介
摘要: 線程是程序運行的基本執行單元。當操作系統(不包括單線程的操作系統,如微軟早期的DOS)在執行一個程序時,會在系統中建立一個進程,而在這個進程中,必須至少建立一個線程(這個線程被稱為主線程)來作為這個程序運行的入口點。因此,在操作系統中運行的任何程序都至少有一個主線程。 閱讀全文
posted @ 2009-03-07 13:43 銀河使者 閱讀(5241) | 評論 (0) 編輯
|
|