黑馬程式設計師 多執行緒 二

2021-06-21 00:12:04 字數 3568 閱讀 3779

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ---------------------

執行緒間通訊-示例**-解決安全問題

執行緒間通訊,就是多個執行緒在操作同乙個資源,但是操作的動作不同。

執行緒間通訊-等待喚醒機制

wait()    notify()    notifyall()

都使用在同步中,因為要對持有監視器(

鎖)的執行緒操作

所以要使用在同步中,因為只有同步才具有鎖 。

這些方法在操作同步中線程時,都必須要標識它們所操作持有的

鎖,只有同乙個

鎖上的被等待執行緒可以被同乙個

鎖 的notify喚醒,不可以對不同鎖中的執行緒進行喚醒,也就是說,等待和喚醒的必須是同乙個鎖

鎖可以是任意物件

,所以可以被任意物件呼叫的方法定義在object類中

class res

catch(exception e){};

} this.name = name;

this.*** = ***;

flag = true;

this.notify();

} public synchronized void out()

catch(exception e){};

} system.out.println(name+"-"+***);

flag = false;

this.notify(); }}

class input implements runnable

public void run()

else

x = (x+1)%2;

} }}class output implements runnable

public void run() }

}public class inputoutputdemo

}

執行緒間通訊-生產者消費者

class resource

catch(exception e){};

} this.name = name+"--"+count++;

system.out.println(thread.currentthread().getname()+"-生產者-"+this.name);

flag = true;

this.notifyall();

} public synchronized void out()

catch(exception e){};

} system.out.println(thread.currentthread().getname()+"--消費者--"+this.name);

flag = false;

this.notifyall(); }}

class producer implements runnable

public void run() }

}class consumer implements runnable

public void run() }

}public class producerconsumerdemo

}

執行緒間通訊-生產者消費者jdk5.0公升級版

jdk1.5提供了多執行緒的公升級解決方案,將同步synchronized替換成顯式的lock操作

將object中的wait,notify,notifyall替換成了condition物件,該物件可以通過lock鎖進行獲取。

該示例中實現了本方只喚醒對方的操作

class resource

this.name = name+"--"+count++;

system.out.println(thread.currentthread().getname()+"-生產者-"+this.name);

flag = true;

condition_con.signal();

} finally

}public synchronized void out() throws interruptedexception

system.out.println(thread.currentthread().getname()+"--消費者--"+this.name);

flag = false;

condition_pro.signal();

} finally

}}class producer implements runnable

public void run()

catch(interruptedexception e)

} }}

class consumer implements runnable

public void run()

catch(interruptedexception e)

} }}

public class producerconsumerdemo2

}

停止執行緒

interrupt

停止執行緒,run方法結束。開啟多執行緒執行,執行**通常是迴圈結構,只要控制住迴圈,就可以讓run方法結束,也就是執行緒結束。

特殊情況:當執行緒處於凍結狀態,就不會讀取標記,那麼執行緒就不會結束。

當沒有指定的方式讓凍結狀態的執行緒恢復到執行狀態時,這是需要對凍結進行清除,強制讓縣城恢復到執行狀態中來,這樣就可以操作標記讓執行緒結束。

thread類中提供了該方法    interrupt();

class stopthread implements runnable

catch(interruptedexception e)

system.out.println(thread.currentthread().getname()+"..run");

} }public void changeflag() }

public class stopthreaddemo

system.out.println(thread.currentthread().getname()+"..."+num);

} }}

守護執行緒

setdaemon();

join方法

當a執行緒執行到了b執行緒的join()方法時,a執行緒就會的等待,等b執行緒執行完,a執行緒才會執行。

join可以用來臨時加入執行緒執行。

class demo implements runnable	}}

public class joindemo

system.out.println("over");

}}

t1都執行完,t2和main才執行

----------------------asp.net+unity開發、.net培訓、期待與您交流! ----------------------

詳細請檢視: 

黑馬程式設計師 多執行緒

windows phone 7手機開發 net培訓 期待與您交流!一 程序與執行緒 l 程序 乙個執行的程式就是乙個程序,程序包括執行中的程式和程式需要用到的記憶體和系統資源 乙個程序至少有乙個執行緒,乙個程序中多個執行緒可以併發執行 l 執行緒 程式中的乙個執行流,每個執行緒都有自己的專有暫存器 ...

黑馬程式設計師 多執行緒

asp.net android io開發 net培訓 期待與您交流!執行緒與程序的關係 乙個程式就相當於乙個程序 乙個程序至少有乙個執行緒 同乙個程序中的多個執行緒之間可以 併發 執行 執行緒 1 乙個執行緒一次只能完成乙個任務 2 多執行緒方法重入 cpu是不斷的在多個執行緒之間來回切換執行的 3...

黑馬程式設計師 多執行緒

asp.net android ios開發 net培訓 期待與您交流!多執行緒為什麼要用多執行緒?1 讓計算機 同時 做多件事情,節約時間。2 後台執行程式,提高程式的執行效率,也不會使主介面出現無響應的情況。3 多執行緒可以讓乙個程式 同時 處理多個事情。4 計算機cpu 大部分時間處於空閒狀態,...