1、通過繼承的方式:
package com.company;
/** * @author jeffchan 2020/04/14
*/public class ticket extends thread
@override
public void run()
}}
模擬賣票的行為:
public class main
}
2、通過實現介面的方式:
/**
* @author jeffchan 2020/04/14
*/public class runabletickets implements runnable
}}
模擬賣票行為:
public class main
}
上面的兩個均能模擬多個視窗賣票的行為,但是,會出現執行緒安全的問題,有可能一張票被賣兩次,而且賣出的票的順序也是亂的,或者賣出不存在的0號票(多執行幾遍,應該能出現,如果出現不了,就在迴圈裡sleep一會)
通過實現runnale的方式,開三個售票視窗,同時加入同步**塊和使用lamba表示式:
package cn.yishijie;
public class client
}, "視窗1").start();
// 單純的執行緒類,同時將任務放入執行緒中
new thread(() ->
}, "視窗2").start();
// 單純的執行緒類,同時將任務放入執行緒中
new thread(() ->
}, "視窗3").start();
}}/**
* 車票資源類
*/class ticket catch (exception e) }}
}}
c 多執行緒,2個執行緒模擬賣火車票的小程式
如果遇到 createmutexw 不能將引數 3 從 const char 8 轉換為 lpcwstr 的錯誤 可以在vs2010中,將專案的字符集,從 使用unicode字符集 改為 使用多位元組字符集 include windows.h include iostream.h dword win...
多執行緒賣火車票的問題
同步 塊 synchronized object 其中object為我們使用的同步鎖,對於繼承的方式,使用this或者建立乙個非靜態物件作為鎖是無用的,無法阻止錯誤資料的產生。所以我們使用static的物件 同步方法 public synchronized void method 由於同步方法的鎖使...
iOS執行緒鎖NSLock案例 賣火車票
import rootviewcontroller.h inte ce rootviewcontroller 宣告總票數 property nonatomic assign nsinteger totaltickets 宣告剩餘票數 property nonatomic assign nsinteg...