日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。