當(dāng)前位置:
首頁 >
java多线程间的通讯
發(fā)布時(shí)間:2025/6/15
38
豆豆
生活随笔
收集整理的這篇文章主要介紹了
java多线程间的通讯
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
什么是多線程之間的通訊? 就是多個(gè)線程在操作同一個(gè)資源,但是操作的動(dòng)作不同。
??
?
package com;class Printer{// 打印機(jī)public String fileName;public String fileType;// true: 生產(chǎn)者正在生產(chǎn)數(shù)據(jù),消費(fèi)者應(yīng)該進(jìn)入休眠狀態(tài)// false:消費(fèi)者正在消費(fèi)數(shù)據(jù),生產(chǎn)者應(yīng)該進(jìn)入休眠狀態(tài)boolean flag = true; }// wait和notify方法要在線程同步中使用 // wait,notify, notifyAll方法都是Object里的方法,用來控制線程的狀態(tài)// wait: 讓持有該對(duì)象的線程把該對(duì)象的控制權(quán)交出去,然后處于等待狀態(tài)。 // notify: 通知某個(gè)正在等待這個(gè)對(duì)象的控制權(quán)的線程可以繼續(xù)運(yùn)行。class Out extends Thread{Printer print;public Out(Printer print){this.print = print;}@Overridepublic void run() {int count = 0;while(true){synchronized (print) {System.out.println("生產(chǎn)者:"+print.flag);if(!print.flag){try {print.wait(); // 消費(fèi)者正在消費(fèi),生產(chǎn)者應(yīng)該休眠// 當(dāng)執(zhí)行完wait方法后,該線程就進(jìn)入休眠,下面的代碼就不會(huì)被執(zhí)行} catch (InterruptedException e) {e.printStackTrace();}}//System.out.println("生產(chǎn)者:"+print.flag);if(count == 0){print.fileName = "三國演義";print.fileType = "pdf";}else{print.fileName = "紅樓夢(mèng)";print.fileType = "txt";}count = (count + 1)%2;print.flag = false;//System.out.println("生產(chǎn)者生產(chǎn)完畢");print.notify();}}} }class Input extends Thread{Printer print;public Input(Printer print){this.print = print;}@Overridepublic void run() {while(true){synchronized (print) {//System.out.println("消費(fèi)者:"+print.flag);if(print.flag){try {print.wait(); // 生產(chǎn)者正在生產(chǎn),消費(fèi)者應(yīng)該休眠} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(print.fileName+", "+print.fileType);print.flag = true;print.notify(); // 消費(fèi)消費(fèi)完畢, 喚醒生產(chǎn)者//System.out.println("消費(fèi)者消費(fèi)完畢");}}} }public class OutInputThread extends Thread{public static void main(String[] args){Printer print = new Printer();Out out = new Out(print);Input input = new Input(print);out.start();input.start();} }?
wait和sleep的區(qū)別:?
? wait可以釋放鎖的資源,而sleep不會(huì)釋放資源
? wait需要notify才能從休眠狀態(tài)變?yōu)檫\(yùn)行狀態(tài)。sleep時(shí)間到期,會(huì)自動(dòng)從休眠狀態(tài)到運(yùn)行狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的java多线程间的通讯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编:ZF(zero flag)标志位
- 下一篇: 汇编:PF标志位