-
從你的角度來看,你算是2個購票系統,2個執行緒沒有操作同乙個變數,乙個執行緒在xc1執行,另乙個執行緒在xc2執行,絕對達不到你期望的效果。
-
因為第乙個是共享乙個資源 m,第二個不是共享每個自己的 5 張票。
-
因為你的同步是寫在 while 迴圈中,在 if 中。
總共有 6 個執行緒,全部被判斷(ticket>0),然後卡在同步**塊中。
也就是說,在某個時間點,當上公升較晚時,這六個執行緒已經通過了 ticket>0 的判斷,然後依次執行同步的 ** 段。 這就是這個結果的樣子。
如果想達到預期的效果,可以加註的判斷,或者把同步放出迴圈。
-
您需要確定兩個執行緒共享相同的成員變數票證,並且您正在使用執行緒同步。
當第乙個執行緒完成執行時,即當 tickets=0 時,第乙個執行緒結束。
第二個執行緒開始執行,但此時 tickets=0,因此第二個執行緒進入 else。
所以只要跳出這個迴圈,結果肯定只會顯示第一次執行緒執行的結果。
關鍵是你要弄清楚這兩個執行緒共享同乙個變數。
-
你這裡有兩個問題。
一:改變主要方法:
a aa = new a();
a aaa = new a();
thread t1 = new thread(aa);
thread t2 = new thread(aaa);
t1 和 t2 的原始定義實際上是乙個執行緒,但現在是兩個執行緒。
第二:如果你想買乙個 thread-0 和 1 交錯的票證,你應該刪除 synchronized (str),但這取決於你的具體要求。
-
當然,因為你的程式總是線上程中執行。 你再開啟幾個程式,看看它們是否都啟動了,看看效果是否是你想要的。 每個執行緒乙個程式,同時啟動多個執行程式的myeclipse。
-
應刪除短語 synchronized (str)。
否則,兩個執行緒都必須使用共享資源 str,並且它們必須排隊。
-
Khan:你的執行緒沒有休眠,它們一直在占用鎖,其他執行緒無法獲得資源,所以當然會執行乙個執行緒。
-
應該是你的機器設定有問題,我的機器是正常的。
-
鎖已被占用,尚未釋放
-
這是多執行緒最簡單的應用。 你可以通過看一下這本書來寫它。
-
在這種情況下,如果多個執行緒之間存在共享資源,請確保將同步鎖新增到操作共享資源的 ** 中。 就像你的 ** 中的 print 語句和 --tickets 語句一樣,你需要新增乙個 synclock,你不能讓它們在多個執行緒之間單獨執行,否則會失敗。 由於執行緒的排程是由作業系統決定的,因此執行緒的執行順序和切換時間是不確定的。
如果多次這樣做,肯定會有不同的列印效果,我不相信你不妨嘗試一下。
98 in 97 發生後的具體執行過程應該是:
執行緒 0 列印 99 後,在 --tickets 之前,系統執行執行緒 1,獲取 99 並列印,執行執行緒 0 的 --tickets,並將此值賦值給 print 語句中的 tickets 變數(可能執行了,然後系統執行執行緒 1 的 --tickets**,繼續列印 97,然後繼續列印 96、95,然後返回執行執行緒 0 的 print 語句, 因為裡面的票證還是上次分配的值,所以這次不是拿新值,而是列印出來98
這裡的關鍵知識點是,當你的 print 語句編譯成最終的機器程式碼執行時,它是多個語句而不是乙個語句,可以反彙編和執行,所以會出現這個問題。 因此,它必須新增同步鎖,以便無法拆卸和執行。
-
這是由於執行緒不同步導致的,執行緒 0 讀取了 98,但在輸出之前,時間片已經分配給執行緒 1,所以接下來就是執行緒 1 出售的票證。 當下乙個時間片重新分發到執行緒 0 時,輸出 98但到那時,Thread-1 已經售出了第 95 張紙。
因此,輸出顯示 98 在 97、96、95 後面。
-
房東的問題在於多執行緒併發執行,雖然每個執行緒中語句的執行順序是確定的,但執行緒的相對執行順序是不確定的。 通常無害,但此過程會產生不確定性。
在 main 方法中,t1 和 t2 是兩個併發執行緒,計算機排程它們,你不採取任何控制措施,比如 synchronized(this) 來新增阻塞控制。 當 t1 讀出售票資訊並即將執行 --tickets 時,t2 執行緒是併發的,它會重新執行,導致錯誤資訊。
房東明白嗎?
-
從 99 0 進入 Print not -- 當 1 進入 Print --1 程序時,此時 0 是 99 1 也是 99)。
那麼這個時候0執行緒減去1,0執行緒又被呼叫了,但是在執行判斷的時候,輸出長時間不執行,--2程序延遲了,這個時候0應該是98,但是不列印)。
2 個程序在 0 個執行緒處,如果和 1 個執行緒也減去 1 此時它將被列印出 97 ---3 個程序)。
1. 執行緒呼叫 95 ---通常為 4 個程序),此時執行 2 程序的 print 語句,所以 0 執行緒為 98,可以使用 synchronized(this) 來控制併發。
-
類 mythread2 是 mythread2
MythRead MT 是 MyThread。 不是同乙個班級。
它應該是 mythread2 mt = new mythread2();
-
做乙個遊戲來玩。 例如坦克戰之類的,主線程記錄鍵盤和滑鼠的移動,確定是否命中等,後台執行緒重新整理並重繪介面。
-
因為你沒有實現執行緒同步。
你寫的 ** 沒有實現執行緒同步,每個開啟的執行緒都會使用 tick 變數,所以會出現上述問題。
解決方案:為多執行緒環境中的變數新增鎖。
Synchronized (this) 塊包含 -- 為什麼使用同步 (this) 塊
其實可以不用這個,只要是乙個物件,每個物件都有乙個“鎖標誌”,多執行緒就是基於同步(“object”)塊中傳遞的物件的“鎖標誌”
實現同步。
這是此類的物件。
-
如果你這樣寫,執行的結果肯定不是唯一的,因為你不能保證只有乙個執行緒來修改價格變動的值。 如果兩個執行緒都執行到"sell tickets:"+tick);
這句話還沒有打勾--; 它只是兩個輸出。
-
每次賣票有兩個不同的人,第一行賣1賣,二行賣0賣,第一次賣票,當然都是100。
看了你的情況,我再簡單幫你分析一下,你是乙個內向、敏感、體貼的人,那女生呢,她也是乙個內向的人,不主動,那你一定在戀愛上要有主動權,你是男生,人不主動,你要主動,女生過馬路讓你牽手, 也就是說至少她對你有好感,沒有好感為什麼要讓你簽字,至於你說的那些人家給你錢買衣服,別想了,因為你還沒有確定關係,這種女孩很有原則,不是乙個愛佔便宜的人, 這一點通過你的描述,我個人覺得這個女孩不物質,你的眼光不錯,至於送禮,個人建議,不要買貴重的,太貴的人不收費多尷尬,你不是說你不知道該說什麼嗎?然後你可以在微信裡聊聊雙方的情況,聊聊你的個人經歷、家庭,先主動聊聊你自己,然後問她情況,比如我喜歡打球、看書,那你呢,閒暇時間你喜歡做什麼? 以此類推這些都是你能理解的,前期,雙方的情況都是通過聊天清楚了解的,包括人的喜好,知道人的喜好,可以更好的約見面,送禮,知道送什麼,讓女生對你的好感加深,因為你做的事都是在了解她的喜好前提下做的, 比如她喜歡吃辣,你帶她去吃重慶火鍋,女生很小心,她不說,她很開心,因為你很細心,通過聊天增進相互了解,不是無話可說,你也可以通過聊天慢慢了解這個女生,不用擔心,只要你是真誠的, 女生對你的印象很好,細心體貼,懂得冷暖,而且很有上進心,順其自然,個人的拙見,希望能幫到你。
根據您目前的情況,以下是一些建議:
1.創業心態的準備。 創業前,做好最壞的打算,就是虧了20萬,怎麼辦,想清楚這個情況,如果最後能忍住,就開始做吧,如果忍不了,現在退出也來不及了,註冊公司也花不了多少錢,真金白銀在後。 >>>More