日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

线程的通信

發(fā)布時(shí)間:2025/3/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程的通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

線程通訊:一個(gè)線程完成了自己的任務(wù)時(shí),要通知另外一個(gè)線程去完成另外一個(gè)任務(wù)

public class Demo1 {public static void main(String [] args){Product p = new Product ();Producer producer = new Producer (p);Customer customer = new Customer (p);producer.start ();customer.start ();}} class Product{double price;String name; } class Producer extends Thread{Product p;public Producer(Product p){this.p = p;}public void run(){int i =0;while(true){if(i%2 ==0){p.name="蘋果";try {Thread.sleep (10);} catch (InterruptedException e) {e.printStackTrace ();}p.price=6.5;}else{p.name="香蕉";p.price=2.0;}System.out.println ("生產(chǎn)者生產(chǎn)了:"+p.name+" 價(jià)格是:"+p.price);i++;}} }class Customer extends Thread{Product p;public Customer(Product product){this.p = product;}public void run(){while(true){System.out.println ("消費(fèi)者消費(fèi)了:"+p.name+" 價(jià)格是:"+p.price);}}} 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:2.0 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:2.0 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:2.0 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:2.0 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:2.0

?

解決價(jià)格錯(cuò)亂問(wèn)題-加synchronized關(guān)鍵字

public class Demo {public static void main(String [] args){Product p = new Product ();Producer producer = new Producer (p);Customer customer = new Customer (p);producer.start ();customer.start ();}} class Product{double price;String name; } class Producer extends Thread{Product p;public Producer(Product p){this.p = p;}public void run(){int i =0;while(true){synchronized (p) {if (i % 2 == 0) {p.name = "蘋果";try {Thread.sleep (10);} catch (InterruptedException e) {e.printStackTrace ();}p.price = 6.5;} else {p.name = "香蕉";p.price = 2.0;}System.out.println ("生產(chǎn)者生產(chǎn)了:" + p.name + " 價(jià)格是:" + p.price);i++;}}} }class Customer extends Thread{Product p;public Customer(Product product){this.p = product;}public void run(){while(true) {synchronized (p) {System.out.println ("消費(fèi)者消費(fèi)了:" + p.name + " 價(jià)格是:" + p.price);}}}}

?

要求:

生產(chǎn)者生產(chǎn)完一個(gè)產(chǎn)品之后就要等待消費(fèi)者去消費(fèi),然后在生產(chǎn),

消費(fèi)者消費(fèi)完一個(gè)產(chǎn)品之后就要等待生產(chǎn)者去生產(chǎn)

?

?

wait() 等待 如果線程執(zhí)行了wait方法那么該線程會(huì)進(jìn)入等待的狀態(tài),等待狀態(tài)下的線程必須調(diào)用notify 方法才能喚醒

notify()喚醒 喚醒等待的線程

wait與notify要注意的事項(xiàng)

1、wait 方法與notify 方法是屬于object對(duì)象的

2、wait 方法與notify方法必須要在同步代碼塊或者是同步函數(shù)中才能使用

3、wait方法與notify方法必須要有鎖對(duì)象調(diào)用。

?

public class SaleTicket {public static void main(String [] args){Product p = new Product ();Producer producer = new Producer (p);Customer customer = new Customer (p);producer.start ();customer.start ();}} class Product{double price;String name;boolean flag = false;//產(chǎn)品生產(chǎn)完畢的標(biāo)志,默認(rèn)是沒有生產(chǎn)完畢的 } class Producer extends Thread{Product p;public Producer(Product p){this.p = p;}public void run(){int i =0;while(true){synchronized (p) {if(p.flag ==false) {if (i % 2 == 0) {p.name = "蘋果";try {Thread.sleep (10);} catch (InterruptedException e) {e.printStackTrace ();}p.price = 6.5;} else {p.name = "香蕉";p.price = 2.0;}System.out.println ("生產(chǎn)者生產(chǎn)了:" + p.name + " 價(jià)格是:" + p.price);i++;p.flag=true;p.notify ();//喚醒消費(fèi)者去消費(fèi)}else{//已經(jīng)生產(chǎn)完畢,等待消費(fèi)者先去消費(fèi)try {p.wait ();} catch (InterruptedException e) {e.printStackTrace ();}}}}} }class Customer extends Thread{Product p;public Customer(Product product){this.p = product;}public void run(){while(true) {synchronized (p) {if(p.flag==true) {//產(chǎn)品已經(jīng)生產(chǎn)完畢System.out.println ("消費(fèi)者消費(fèi)了:" + p.name + " 價(jià)格是:" + p.price);p.flag = false;p.notify ();//喚醒生產(chǎn)者去生產(chǎn)}else{//產(chǎn)品還沒有生產(chǎn),應(yīng)該等待生產(chǎn)者先去生產(chǎn)try {p.wait ();//消費(fèi)者也等待了。。} catch (InterruptedException e) {e.printStackTrace ();}}}}}} 生產(chǎn)者生產(chǎn)了:蘋果 價(jià)格是:6.5 消費(fèi)者消費(fèi)了:蘋果 價(jià)格是:6.5 生產(chǎn)者生產(chǎn)了:香蕉 價(jià)格是:2.0 消費(fèi)者消費(fèi)了:香蕉 價(jià)格是:2.0

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhou-test/p/9879905.html

總結(jié)

以上是生活随笔為你收集整理的线程的通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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