執行緒同步優化例項

2021-08-27 17:47:15 字數 1916 閱讀 4144

**如下:

package com.bohai.thread;

public class threadnosynchronized

}class sharedata

class threaddemo extends thread // 宣告,並實現threaddemo 構造方法

// 宣告,並實現threaddemo 帶引數的構造方法

threaddemo(string szname, sharedata oshare)

public void run() catch (interruptedexception e)

system.out.println(this.getname() + ":" + oshare.szdata); // 輸出字串資訊

} else if (this.getname().equals("thread2")) catch (interruptedexception e) // 捕獲異常

system.out.println(this.getname() + ":" + oshare.szdata); // 輸出字串資訊

} }

} }

執行結果如下:

thread1:這是第 2 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread1:這是第 1 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

thread2:這是第 2 個執行緒

從結果可以看出,這不是我們期望的結果:優化後**如下:

package com.bohai.thread;

public class threadnosynchronized

}class sharedata

class threaddemo extends thread // 宣告,並實現threaddemo 構造方法

// 宣告,並實現threaddemo 帶引數的構造方法

threaddemo(string szname, sharedata oshare)

public void run()

// 為了演示產生的問題,這裡設定一次睡眠

try catch (interruptedexception e)

system.out.println(this.getname() + ":" + oshare.szdata); // 輸出字串資訊

} else if (this.getname().equals("thread2"))

// 為了演示產生的問題,這裡設定一次睡眠

try catch (interruptedexception e) // 捕獲異常

system.out.println(this.getname() + ":" + oshare.szdata); // 輸出字串資訊

} }

} }

對共享變數需要進行同步。不要在方法上使用 synchronized。

執行緒 執行緒池 執行緒同步 例項

執行緒 using system using system.collections.generic using system.text using system.threading namespace 執行緒thread public void threadmain data static void...

Java執行緒同步例項

package lab8.wu public class mythread class create implements runnable public void run catch interruptedexception e 執行結果,thread1和thread2是亂序的,synchroni...

linux Posix執行緒同步 條件變數 例項

條件變數 condtion variable 是在多執行緒程式中用來實現 等待 喚醒 邏輯常用的方法。舉個簡單的例子,應用程式a中包含兩個執行緒t1和t2。t1需要在bool變數test cond為true時才能繼續執行,而test cond的值是由t2來改變的,這種情況下,如何來寫程式呢?可供選擇...