1.多個執行緒訪問共享資料的方式
多個執行緒訪問共享資料分為兩種方式:
1)每個執行緒執行操作共享資料的方式相同
2)每個執行緒執行操作共享資料的方式不同
2.多個執行緒執行操作共享資料的方式相同
如果每個執行緒執行操作共享資料的方式相同,那麼可以使用同乙個runnable物件,將共享資料放在runnable中並重寫操作共享資料的run()方法。然後建立多個執行緒並將同乙個runnable物件作為引數傳入執行緒的構造器中。例如售票系統。
//售票類
class tickets implements runnable
}} }
}public class ticketdemo
}
3.多個執行緒執行操作共享資料的方式不同
如果每個執行緒執行操作共享資料的方式不同,可以有3中方式實現:
1)將共享資料封裝在乙個物件中,然後將此物件逐一傳遞給各個不同的runnable,每個runnable的run()封裝不同操作共享資料的方法。
例:設計4個執行緒,其中2個執行緒每次對j加1,另外兩個執行緒每次對j減1。
//定義data類封裝資料j
class data
//對j進行減1的操作
public synchronized void decrement()
}//定義myrunnalbeplus對j進行加操作
class myrunnalbeplus implements runnable
@override
public void run() }}
//定義myrunnalbedec對j進行加操作
class myrunnalbedec implements runnable
@override
public void run() }}
public class multithreadsharedata
}}
2)將不同操作共享資料的runnable作為某乙個類的內部類,共享資料作為外部類的成員變數。
public class multithreadsharedata
//對j進行減1的操作
public static synchronized void decrement()
//將runnable定義為內部類
static class inc implements runnable }
static class dec implements runnable }
public static void main(string args)
}}
3)上面兩種方式的組合:將共享資料封裝在乙個物件中,每個執行緒對共享資料的操作也由該物件完成。物件作為外部類的成員變數,而runnable定義為內部類。
//定義data類封裝資料j
class data
//對j進行減1的操作
public synchronized void decrement()
}public class multithreadsharedata
}).start();
new thread(new runnable()
}).start();
} }}
多執行緒要訪問共享資料的方式
1.如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如 賣票系統 2.如果每個執行緒執行的 不同,這時候需要不同的runnable物件,有如下2種方式來實現這些runnable物件之間的資料共享 1 將共享資料封裝到另外乙個物件中,然後將這...
多執行緒訪問共享記憶體的不加鎖實現方式
多執行緒訪問共享記憶體,為了實現同步,常採用加鎖的方式。那麼,如何採用不加鎖的方式來達到執行緒同步的目的呢?思路 儲存兩塊共享記憶體,一塊用於讀操作,一塊用於寫操作。初始時,兩塊共享記憶體內容一致。讀操作均是讀取第一塊共享記憶體的資料 寫操作均是寫第二塊共享記憶體。在多個讀操作乙個寫操作的情況下,讀...
ios 多執行緒訪問共享資源
什麼是共享資源,一塊資源可能會被多個執行緒去共享,也就是多個執行緒可能會去訪問同一塊資源,也就是共享這一塊資源。比如說多執行緒去訪問同乙個物件,同乙個變數,同乙個檔案。當多個執行緒訪問同一塊資源的時候,很容易引發資料的錯亂和資料的安全問題。這個時候我們在乙個執行緒在訪問那塊資源的時候,我們需要把它個...