多執行緒訪問共享數方式的總結

2021-06-19 17:27:19 字數 1762 閱讀 9729

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 多執行緒訪問共享資源

什麼是共享資源,一塊資源可能會被多個執行緒去共享,也就是多個執行緒可能會去訪問同一塊資源,也就是共享這一塊資源。比如說多執行緒去訪問同乙個物件,同乙個變數,同乙個檔案。當多個執行緒訪問同一塊資源的時候,很容易引發資料的錯亂和資料的安全問題。這個時候我們在乙個執行緒在訪問那塊資源的時候,我們需要把它個...