亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

同步線程與死鎖

同步線程與死鎖

陳高高_ 2015-03-16 11:09:08
package com.同步線程與死鎖;public class threadDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Mythread my=new Mythread(); Thread t1=new Thread(my,"汪汪"); Thread t2=new Thread(my,"瞄瞄"); t1.start(); t2.start(); }}class Mythread implements Runnable{ Mythread i=new Mythread();//同步的標記對象 public void run(){ //同步代碼塊 synchronized(i){ System.out.println(Thread.currentThread().getName()+"正在洗澡"); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"洗完了"); } }}Exception in thread "main" java.lang.StackOverflowError at com.同步線程與死鎖.Mythread.<init>(threadDemo.java:19) at com.同步線程與死鎖.Mythread.<init>(threadDemo.java:19) at com.同步線程與死鎖.Mythread.<init>(threadDemo.java:19)........輸出結果怎么會這樣?
查看完整描述

6 回答

已采納
?
曖月的貓

TA貢獻6條經驗 獲得超0個贊

因為你Mythread類里有一句話;

Mythread i=new Mythread();

意思就是說 你的每個Mythread對象里有一個Mythread類型的對象的屬性。而那個屬性Mythread類型里又包含一個Mythread對象,這樣死循環下去。你的計算機就崩潰了(什么時候是個頭?。?/p>


你的Mythread i;主要是用來做鎖的,你可以用this來做鎖,這樣對象內部的語句不會沖突。但是汪汪和喵喵就可以同時洗澡了,應該不是你想要的結果。其實你應該定義一個澡堂類,里面有一個洗澡方法。洗澡方法用this加鎖。定義汪汪和喵喵線程,兩個線程run方法里調用澡堂洗澡方法。

查看完整回答
反對 回復 2015-03-16
?
慕娘1402314

TA貢獻1條經驗 獲得超0個贊

我也不知道是哪里出錯了

查看完整回答
反對 回復 2015-03-17
?
Coda

TA貢獻32條經驗 獲得超5個贊

Mythread i=new Mythread();內存溢出了

查看完整回答
反對 回復 2015-03-16
?
迷茫_先森

TA貢獻1條經驗 獲得超0個贊

class Mythread implements Runnable{

Mythread i=new Mythread();//同步的標記對象


你這樣不就一直去new了... 然后都棧溢出了

查看完整回答
反對 回復 2015-03-16
?
修緣

TA貢獻1條經驗 獲得超0個贊

Mythread i=new Mythread(); 這個聲明,你類都沒有創建結束就直接new了

查看完整回答
反對 回復 2015-03-16
?
陳高高_

TA貢獻2條經驗 獲得超0個贊

不知道是哪里出錯了耶

查看完整回答
反對 回復 2015-03-16
  • 6 回答
  • 1 關注
  • 2141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號