是的,就是這樣。即使由於某種性質的怪異,你的線程也要在同一時間開始,他們很快就會因爲它們之間的資源爭用(最起碼,訪問數據庫表或DBMS服務器進程)而很快失去控制。
如果他們留大多是在步驟(即從來沒有超過幾毫秒更多),只是選擇不同的「分辨率」爲您CreatedDateTime領域。把它放在第二個(或第二個)而不是毫秒的最接近的10 第。或以其他方式使用固定值。
否則,只要意識到這是完全正常的行爲。
而且,作爲在評論中指出的BC,你可能誤解這個詞的使用「同步」的。它被使用(在Java中,我希望C#是類似的),以確保兩個線程不會同時訪問同一資源。實際上,它幾乎可以保證線程不會保持同步,因爲你理解這個術語的含義(我個人認爲你的定義在英語使用方面是正確的(同時發生的事情),但某些計算機語言已經將定義他們自己的目的)。
如果您正在測試時會發生什麼具體的時間戳進入數據庫,你可以不依賴於線程「表現自己」的計劃正在按照特定的順序,並在特定的時間。你真的需要以某種方式虛擬出數據,否則就像試圖將果凍釘在樹上(或者訓練一隻貓)。
一個解決方案是不使用諸如getCurrentTime()
或now()
之類的東西,而是使用具有已知時間戳的特定插入組。根據您的實際架構,這可能很困難(例如,如果您只是調用一個本身獲取當前時間戳爲毫秒分辨率的API)。
如果您控制填充時間戳列的實際SQL,則需要將其更改爲使用預先計算的值,而不是now()
或其等效項。
這幾乎違背了線程調度程序的想法... – GEOCHET 2009-02-20 01:05:35
我想你誤解了同步的詞。 – 2009-02-20 01:07:00