Java多線程程序中經常用到的方法有以下幾個:run(),start(),wait(),sleep(),notify(),notifyAll(),yield(),join(),還有一個重要的關鍵字 synchronized。下面分別對這些方法進行解釋:
一、run()和start()
這兩個方法應該都比較熟悉,把需要並行處理的代碼放在run()方法中,start()方法啓動線程將自動調用 run()方法,這是由Java的內存機制規定的'。並且run()方法必須是public訪問權限,返回值類型爲void。
二、關鍵字Synchronized
這個關鍵字用於保護共享數據,當然前提是要分清哪些數據是共享數據。每個對象都有一個鎖標誌,當一個線程訪問該對象時,被Synchronized修飾的數據將被“上鎖”,阻止其他線程訪問。當前線程訪問完這部分數據後釋放鎖標誌,其他線程就可以訪問了。
ic ThreadTest implements Runnable
2.{
ic synchronized void run(){
(int i=0;i<10;i++)
5.{
tln(" " + i);
7.}
8.}
ic static void main(String[] args)
10.{
able r1 = new ThreadTest();
able r2 = new ThreadTest();
ad t1 = new Thread(r1);
ad t2 = new Thread(r2);
t();
t();
17.}
18.}
以上這段程序中的 i 變量並不是共享數據,也就是這裏的Synchronized關鍵字並未起作用。因爲t1,t2兩個線程是兩個對象(r1,r2)的線程。不同的對象其數據是不同的,所以r1和r2兩個對象的i變量是並不是共享數據。
當把代碼改成如下:Synchronized關鍵字纔會起作用
able r = new ThreadTest();
ad t1 = new Thread(r);
ad t2 = new Thread(r);
t();
t();