在多執行緒中,同步與死鎖概念很重要,在本章中必須了解以下幾點:
1)**需要同步。
2)如何實現同步,了解**即可。
3)及實現同步後有哪些***。
**並不要求可以完整編寫,但是概念必須清楚。
以買火車票為例,不管多少地方可以買火車票,最終一趟列車的車票數量是固定的,如果把各個售票點理解為執行緒的話,則所有執行緒應該共同擁有同乙份票數。
package執行結果:thread1;
class mythread implements
runnable}}
};public
class
demo1
};
賣票:ticket = 5賣票:ticket = 3賣票:ticket = 2賣票:ticket = 1賣票:ticket = 4因為網路操作可能會有延遲,所以這裡增加乙個延遲操作sleep();修改如下;
package執行結果:thread1;
class mythread implements
runnablecatch(interruptedexception e)system.out.println("賣票:ticket = " + ticket--);}}
}};public
class
demo1
};
賣票:ticket = 5賣票:ticket = 3賣票:ticket = 4賣票:ticket = 2賣票:ticket = 1賣票:ticket = 0賣票:ticket = -1此時結果發現賣出的票數成負數,程式**出現問題。
要解決這種問題就要使用同步,所謂同步就是指多個操作在同一時間段內只能有乙個執行緒進行,其他執行緒要等這個執行緒完成之後才能繼續執行。
要想解決資源共享的同步操作問題,可以使用同步**塊及同步方法兩種方式完成。
之前已經介紹過**塊分四種:
1)普通**塊,直接定義在方法中。
2)構造塊,是直接定義在類中,優先於構造方法執行,重複呼叫。
3)靜態塊,是使用static關鍵字宣告的,優先於構造塊執行,只執行一次。
4)同步**塊,使用synchronized關鍵字宣告的**塊,叫做同步**塊。
syschronized
同步**塊的格式:
synchronized同步的時候必須指明同步的物件,一般情況下,會將當前物件作為同步物件,使用this表示。(同步物件)
package執行結果:thread1;
class mythread implements
runnablecatch
(interruptedexception e)
system.out.println("賣票:ticket = " + ticket--);
}}}
}};public
class
demo1
};
賣票:ticket = 5賣票:ticket = 4賣票:ticket = 3賣票:ticket = 2賣票:ticket = 1從執行結果可以發現,程式加入了同步操作,所以不會產生負數的情況,但是程式的執行效率明顯降低很多。
使用了synchronized宣告的方法為同步方法。
同步方法定義格式:
synchronized同步方法解決如下:方法返回值型別 方法名稱(引數列表)
package執行結果:thread1;
class mythread implements
runnable
}public
synchronized
void sale()catch
(interruptedexception e)
system.out.println("賣票:ticket = " + ticket--);}}
};public
class
demo1
};
賣票:ticket = 5賣票:ticket = 4賣票:ticket = 3賣票:ticket = 2賣票:ticket = 1資源共享時候需要進行同步操作。程式中過多的同步會產生死鎖。
死鎖一般情況下就是表示互相等待,是在程式執行時候出現的一種文體。
下面通過乙個**來模擬一下死鎖的概念,本**讀者只需了解其效果即可,對於**不必深入了解。
package執行結果:thread1;
class zhangsan
public
void
get()
};class lisi
public
void
get()
};public
class demo1implementsrunnable
catch
(interruptedexception e)
synchronized
(ls)}}
else
catch
(interruptedexception e)
synchronized
(zs)}}
}public
static
void
main(string args)
};
張三對李四說:「你給我畫,我就把書給你。」
李四對張三說:「你給我書,我就把畫給你」
此時雙方說完話都在等待對方回應,此時處於停滯狀態,都在互相等待著對方回答。
執行緒同步與死鎖
執行緒同步與死鎖 課程大綱 一 多執行緒共享資料 1 在多執行緒的操作中,多個執行緒有可能同時處理同乙個資源,這就是多執行緒中的共享資料。二 執行緒同步 1 解決資料共享問題,必須使用同步,所謂同步就是指多個執行緒在同乙個時刻只能有乙個執行緒執行指定 其他執行緒要等到該執行緒執行結束之後才能繼續執行...
執行緒 同步與死鎖
一,本章目標 了解執行緒同步的作用 了解同步 塊及同步方法的作用 了解死鎖的產生 二,具體內容 說明 在多執行緒的開發中,同步與死鎖的概念是非常重要的,一定要掌握以下幾點 那裡需要絨布 如何實現同步,了解即可 實現同步之後有什麼 問題引出 以賣火車票為例,如果想買火車票,可以去火車站購買或者去各個售...
執行緒死鎖與同步
同步死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。當系統中供多個程序共享的資源如印表機,其數目不足以滿足各個程序的需要時,會引起各個程序對...