求解java多线程的死锁 请教JAVA多线程中死锁的问题

\u4ec0\u4e48\u662fjava\u591a\u7ebf\u7a0b\u4e2d\u7684\u6b7b\u9501

\u4e24\u4e2a\u6216\u8005\u591a\u4e2a\u7ebf\u7a0b\u4e4b\u95f4\u76f8\u4e92\u7b49\u5f85\uff0c\u5bfc\u81f4\u7ebf\u7a0b\u90fd\u65e0\u6cd5\u6267\u884c\uff0c\u53eb\u505a\u7ebf\u7a0b\u6b7b\u9501\u3002

\u4ea7\u751f\u6b7b\u9501\u7684\u6761\u4ef6\uff1a
1.\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\u4e0d\u80fd\u5171\u4eab
2.\u81f3\u5c11\u6709\u4e00\u4e2a\u4efb\u52a1\u5fc5\u987b\u6301\u6709\u4e00\u4e2a\u8d44\u6e90\u5e76\u4e14\u7b49\u5f85\u83b7\u53d6\u53e6\u4e00\u4e2a\u88ab\u522b\u7684\u4efb\u52a1\u6301\u6709\u7684\u8d44\u6e90
3.\u8d44\u6e90\u4e0d\u80fd\u4efb\u52a1\u62a2\u5360
4.\u5fc5\u987b\u6709\u5faa\u73af\u7b49\u5f85

1.Java\u4e2d\u5bfc\u81f4\u6b7b\u9501\u7684\u539f\u56e0Java\u4e2d\u6b7b\u9501\u6700\u7b80\u5355\u7684\u60c5\u51b5\u662f\uff0c\u4e00\u4e2a\u7ebf\u7a0bT1\u6301\u6709\u9501L1\u5e76\u4e14\u7533\u8bf7\u83b7\u5f97\u9501L2\uff0c\u800c\u53e6\u4e00\u4e2a\u7ebf\u7a0bT2\u6301\u6709\u9501L2\u5e76\u4e14\u7533\u8bf7\u83b7\u5f97\u9501L1\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u7684\u9501\u7533\u8bf7\u64cd\u4f5c\u90fd\u662f\u963b\u585e\u7684\uff0c\u6240\u4ee5\u7ebf\u7a0bT1\u548cT2\u6c38\u8fdc\u88ab\u963b\u585e\u4e86\u3002\u5bfc\u81f4\u4e86\u6b7b\u9501\u3002\u8fd9\u662f\u6700\u5bb9\u6613\u7406\u89e3\u4e5f\u662f\u6700\u7b80\u5355\u7684\u6b7b

你这是同步锁,锁的是A对象。有线程跟你一样用 A对象当锁的时候 ,只会有一条线程 来执行 B。其他线程都得等待。
1.A区域究竟什么对象可以作为锁?
对象,类对象。类对象 全局只有一个 比如 A.class ,当有人用到 这个类对象的时候 就会将其锁住。不让其他线程进入。
2.是不是我在一个线程中将A这个对象作为锁,在另一个线程中对A这个对象进行操作,就会发生死锁?
死锁的根本原因1)是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环;2)默认的锁申请操作是阻塞的。所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。要采取各种方法来杜绝这种可能性。
你这样 锁不到的。举个例子 死锁 就是 x线程 锁住了 A对象 然后 调用B对象的方法,y线程 锁住了B对象调用A对象的方法,两边 都在互相尝试获取对方的锁,但是拿不到。因为 x锁住了A对象。y锁住了B对象。他们互相拿不到 就叫死锁。这只是个例子还有很多。
3不是说任何对象都可以作为一把锁吗?那么每一个锁我使用一个独立的成员对象作为锁,不就是可以很容易避开死锁吗?为什么说死锁很容易发生?
你每个锁用一个独立的成员对象作为锁,没问题,只要没有存在交叉。上面那个例子一样。
避免死锁是一件困难的事,遵循以下原则有助于规避死锁:
1、只在必要的最短时间内持有锁,考虑使用同步语句块代替整个同步方法;
2、尽量编写不在同一时刻需要持有多个锁的代码,如果不可避免,则确保线程持有第二个锁的时间尽量短暂;
3、创建和使用一个大锁来代替若干小锁,并把这个锁用于互斥,而不是用作单个对象的对象级别锁;

我是不会的啊

  • JAVA绋嬪簭璁捐,澶氱嚎绋涓旈伩鍏姝婚攣
    绛旓細鏁版嵁搴撴閿侀棶棰樹笉鏄撳鐞嗭紝閫氬父鏁版嵁琛岃繘琛屾洿鏂版椂锛岄渶瑕侀攣瀹氳鏁版嵁琛岋紝鎵ц鏇存柊锛岀劧鍚庡湪鎻愪氦鎴栧洖婊氬皝闂簨鍔℃椂閲婃斁閿銆傜敱浜庢暟鎹簱骞冲彴銆侀厤缃殑闅旂绾т互鍙婃煡璇㈡彁绀虹殑涓嶅悓锛岃幏鍙栫殑閿佸彲鑳芥槸缁嗙矑搴︽垨绮楃矑搴︾殑锛屽畠浼氶樆濉烇紙鎴栦笉闃诲锛夊叾浠栧鍚屼竴鏁版嵁琛屻佽〃鎴栨暟鎹簱鐨勬煡璇傚熀浜庢暟鎹簱妯″紡锛岃鍐欐搷浣滀細瑕佹眰閬嶅巻鎴栨洿鏂...
  • Java Swing澶氱嚎绋嬫閿闂瑙f瀽
    绛旓細褰撲竴涓▼搴忎骇鐢姝婚攣鐨勬椂鍊 浣犱竴瀹氫細甯屾湜灏藉揩鎵惧埌鍘熷洜骞朵笖瑙e喅瀹 杩欐椂鍊 浣犱竴鑸殑绮惧姏浼氱敤鍦ㄦ煡鎵惧紩鍙戞閿佺殑浣嶇疆 鍙︿竴鍗婄殑绮惧姏浼氱敤浜庡鍫嗘爤杩涜璺熻釜涓纭畾寮曞彂姝婚攣鐨勫師鍥 浣嗘槸鍦Java Swing绋嬪簭涓 浣犵殑鎵鏈夊姫鍔涘彲鑳介兘鏄病鏈変环鍊肩殑 杩欐槸鍥犱负Java瀵筍wing鐨澶氱嚎绋缂栫▼鏈変竴涓壒娈婅姹 灏辨槸鍦⊿wing閲 鍙兘鍦ㄤ笌Swi...
  • 姹傝Вjava澶氱嚎绋嬬殑姝婚攣
    绛旓細1銆佸彧鍦ㄥ繀瑕佺殑鏈鐭椂闂村唴鎸佹湁閿侊紝鑰冭檻浣跨敤鍚屾璇彞鍧椾唬鏇挎暣涓悓姝ユ柟娉锛2銆佸敖閲忕紪鍐欎笉鍦ㄥ悓涓鏃跺埢闇瑕佹寔鏈夊涓攣鐨勪唬鐮侊紝濡傛灉涓嶅彲閬垮厤锛屽垯纭繚绾跨▼鎸佹湁绗簩涓攣鐨勬椂闂村敖閲忕煭鏆傦紱3銆佸垱寤哄拰浣跨敤涓涓ぇ閿佹潵浠f浛鑻ュ共灏忛攣锛屽苟鎶婅繖涓攣鐢ㄤ簬浜掓枼锛岃屼笉鏄敤浣滃崟涓璞$殑瀵硅薄绾у埆閿侊紱...
  • Java澶氱嚎绋闂鍙婂鐞(绗旇)
    绛旓細姝婚攣鍑虹幇鐨勬渶鏈川鍘熷洜杩樻槸閫昏緫澶勭悊涓嶅涓ヨ皑 鍦ㄨ冭檻鏃朵笉鏄緢鍛ㄥ叏 鎵浠ヤ竴鑸渶瑕佷慨鏀圭▼搴忛昏緫鎵嶈兘澶熷緢濂界殑瑙e喅姝婚攣 绾跨▼浼樺厛绾 鍦ㄦ棩甯哥敓娲讳腑 渚嬪鐏溅鍞エ绐楀彛绛夌粡甯稿彲浠ョ湅鍒 XXX浼樺厛 閭d箞澶氱嚎绋嬬紪绋嬩腑姣忎釜绾跨▼鏄惁涔熷彲浠ヨ缃紭鍏堢骇鍛紵鍦ㄥ绾跨▼缂栫▼涓 鏀寔涓烘瘡涓嚎绋嬭缃紭鍏堢骇 浼樺厛绾ч珮鐨勭嚎绋嬪湪鎺掗槦鎵ц鏃朵細...
  • 浠涔堟槸java绾跨▼姝婚攣,濡備綍瑙e喅姝婚攣闂
    绛旓細鎵嶈兘瀹屾垚鎵ц 鍚屾椂t2涔熷湪鎵ц锛宼2鑾峰彇鏂规硶B鐨勯攣鏍囧織锛屾柟娉旴璋冪敤浜嗘柟娉旳,t2涔熼渶瑕佽幏鍙栦袱涓柟娉旳,B鐨勯攣鏍囧織鎵嶈兘鎵ц瀹屾垚 褰搕1 鑾峰彇浜咥鏂规硶鐨勯攣鏍囧織锛屽悓鏃秚2鑾峰彇浜咮鏂规硶鐨勯攣鏍囧織 閭d箞t1浼氱瓑寰卼2閲婃斁鏂规硶B鐨勯攣鏍囧織锛宼2涔熷湪绛夊緟t1閲婃斁鏂规硶A鐨勯攣鏍囧織锛岃繖鏍峰氨褰㈡垚浜姝婚攣锛岄兘鍦ㄧ瓑寰......
  • java 姝婚攣
    绛旓細濡傛灉涓涓嚎绋嬭幏寰椾簡涓涓攣涔嬪悗杩樿绛夊緟鏉ヨ嚜鍙︿竴涓绾跨▼鐨閫氱煡锛屽彲鑳藉嚭鐜板彟涓绉嶉殣鎬姝婚攣锛岃冭檻浠g爜浜屻//浠g爜浜 public class queue { static java.lang.Object queueLock_;Producer producer_;Consumer consumer_;public class Producer { void produce() { while (!done) { 鈥渟ynchronized鈥 (queueLock...
  • JAVA涓濡備綍鍘婚伩鍏澶氱嚎绋浜х敓鐨勬閿
    绛旓細澶氱嚎绋鏄洶闅剧殑锛屽湪寮濮嬬紪绋嬩箣鍓嶈缁嗚璁$郴缁熻兘澶熷府鍔╀綘閬垮厤闅句互鍙戠幇Java绾跨▼姝婚攣鐨勯棶棰樸 Volatile 鍙橀噺锛寁olatile 鍏抽敭瀛楁槸 Java 璇█涓轰紭鍖栫紪璇戝櫒璁捐鐨勩備互涓嬮潰鐨勪唬鐮佷负渚嬶細 1.class VolatileTest { 2.public void foo() { 3.boolean flag = false;4.if(flag) { 5.//this could happen 6.} ...
  • java澶氱嚎绋嬫閿闂
    绛旓細public void run() {//绾跨▼绫1鐨剅un鏂规硶 synchronized (A.class) {//绾跨▼绫1鑾峰彇A绫荤殑閿 new A().a();//鏋勫缓A绫昏皟鐢╝鏂规硶锛岀嚎绋嬪彲浠ユ墽琛屽埌杩欓噷 synchronized (B.class) {//绾跨▼1璇锋眰鑾峰彇B绫荤殑閿侊紝鐪嬪悗闈㈢殑浠g爜鎴戜滑鐭ラ亾B绫荤殑閿佸湪绾跨▼2涓紝褰㈡垚姝婚攣 new B().b();//鏋勯燘绫伙紝璋冪敤b鏂规硶...
  • JAVA 鍏充簬姝婚攣鐨勯棶棰
    绛旓細1.涓や釜绾跨▼閮芥墽琛宻et鏂规硶锛屽綋涓涓嚎绋嬭繘鍏ヤ簡鍚屾鍧楋紝閿佷綇浜哸寮曠敤鐨勫璞★紝鐒跺悗浼戠湢0.5绉掞紝鐒跺悗浠g爜鍧楅噷闈㈠張閿佷綇浜哹寮曠敤鐨勫璞★紱鐩村埌閲婃斁瀵筧寮曠敤鐨勫璞$殑閿侊紝鍙︿竴涓嚎绋嬫墠杩涘叆set鏂规硶杩欎釜浠g爜鍧楅攣浣忎簡a寮曠敤鐨勫璞$劧鍚庣潯鐪0.5绉掞紝鐒跺悗鎯冲幓閿佷綇b寮曠敤鐨勫璞★紝浣嗘槸鍦ㄨ繖鐫$湢0.5绉掔殑鏃跺欑涓涓嚎绋嬪凡缁忚繘鍏...
  • Java 澶氱嚎绋涓 浠涔堟槸姝婚攣鏈変粈涔浣滅敤
    绛旓細鎵璋姝婚攣:鏄寚涓や釜鎴栦袱涓互涓婄殑杩涚▼鍦ㄦ墽琛岃繃绋嬩腑锛屽洜浜夊ず璧勬簮鑰岄犳垚鐨勪竴绉嶄簰鐩哥瓑寰呯殑鐜拌薄锛岃嫢鏃犲鍔涗綔鐢紝瀹冧滑閮藉皢鏃犳硶鎺ㄨ繘涓嬪幓銆傛鏃剁О绯荤粺澶勪簬姝婚攣鐘舵佹垨绯荤粺浜х敓浜嗘閿侊紝杩欎簺姘歌繙鍦ㄤ簰鐩哥瓑寰呯殑杩涚▼绉颁负姝婚攣杩涚▼銆傜敱浜庤祫婧愬崰鐢ㄦ槸浜掓枼鐨勶紝褰撴煇涓繘绋嬫彁鍑虹敵璇疯祫婧愬悗锛屼娇寰楁湁鍏宠繘绋嬪湪鏃犲鍔涘崗鍔╀笅锛屾案杩滃垎閰嶄笉...
  • 扩展阅读:java多线程线程池 ... java ... java多线程面试题及答案 ... java秒杀 多线程实例 ... 线程死锁 ... java线程死锁怎么解决 ... java多线程 多进程案例 ... java多线程状态 ... java死锁的原因及解决方法 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网