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

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

生活随笔

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

编程问答

线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)

發(fā)布時(shí)間:2025/4/16 编程问答 36 豆豆

生產(chǎn)者與消費(fèi)者模式



一個(gè)生產(chǎn)者與一個(gè)消費(fèi)者


題目:現(xiàn)在有兩個(gè)線程,可以操作初始值為0的一個(gè)變量,實(shí)現(xiàn)一個(gè)線程對(duì)該變量加1,另一個(gè)線程對(duì)該變量減1,這兩個(gè)線程的操作加一.減一交替,進(jìn)行10輪,變量的初始值為0
???? 高內(nèi)聚低耦合的前提下,線程操作資源類

package com.dym.juc;class AirConditioner{private int number=0;public synchronized void increment() throws InterruptedException {//1.判斷if(number!=0){this.wait();}//2.干活number++;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();}public synchronized void decrement() throws InterruptedException {//1.判斷if(number==0){this.wait();}//2.干活number--;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();} }// //題目:現(xiàn)在有兩個(gè)線程,可以操作初始值為0的一個(gè)變量 // 實(shí)現(xiàn)一個(gè)線程對(duì)該變量加1,另一個(gè)線程對(duì)該變量減1 // 這兩個(gè)線程的操作加一,減一交替,進(jìn)行10輪,變量的初始值為0 // 高內(nèi)聚低耦合的前提下,線程操作資源類 // 判斷/干活/通知public class ThreadWaitNotifyDemo {public static void main(String[] args) {AirConditioner airConditioner=new AirConditioner();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"A").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"B").start();} }



兩個(gè)生產(chǎn)者與兩個(gè)消費(fèi)者

package com.dym.juc;class AirConditioner{private int number=0;public synchronized void increment() throws InterruptedException {//1.判斷if(number!=0){this.wait();}//2.干活number++;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();}public synchronized void decrement() throws InterruptedException {//1.判斷if(number==0){this.wait();}//2.干活number--;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();} }// //題目:現(xiàn)在有兩個(gè)線程,可以操作初始值為0的一個(gè)變量 // 實(shí)現(xiàn)一個(gè)線程對(duì)該變量加1,另一個(gè)線程對(duì)該變量減1 // 這兩個(gè)線程的操作加一,減一交替,進(jìn)行10輪,變量的初始值為0 // 高內(nèi)聚低耦合的前提下,線程操作資源類 // 判斷/干活/通知public class ThreadWaitNotifyDemo {public static void main(String[] args) {AirConditioner airConditioner=new AirConditioner();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"A").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"B").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"C").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"D").start();} }



package com.dym.juc;class AirConditioner{private int number=0;public synchronized void increment() throws InterruptedException {//1.判斷if(number!=0){this.wait();}//2.干活number++;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();}public synchronized void decrement() throws InterruptedException {//1.判斷if(number==0){this.wait();}//2.干活number--;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();} }// //題目:現(xiàn)在有兩個(gè)線程,可以操作初始值為0的一個(gè)變量 // 實(shí)現(xiàn)一個(gè)線程對(duì)該變量加1,另一個(gè)線程對(duì)該變量減1 // 這兩個(gè)線程的操作加一,減一交替,進(jìn)行10輪,變量的初始值為0 // 高內(nèi)聚低耦合的前提下,線程操作資源類 // 判斷/干活/通知public class ThreadWaitNotifyDemo {public static void main(String[] args) {AirConditioner airConditioner=new AirConditioner();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(200);airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"A").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(300);airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"B").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(400);airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"C").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(500);airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"D").start();} }



多線程交互中,必須要防止多線程的虛假喚醒,也即(判斷只用while,不能用if)

package com.dym.juc;class AirConditioner{private int number=0;public synchronized void increment() throws InterruptedException {//1.判斷while (number!=0){this.wait();}//2.干活number++;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();}public synchronized void decrement() throws InterruptedException {//1.判斷while (number==0){this.wait();}//2.干活number--;System.out.println(Thread.currentThread().getName()+"\t"+number);//3.通知this.notifyAll();} }// //題目:現(xiàn)在有兩個(gè)線程,可以操作初始值為0的一個(gè)變量 // 實(shí)現(xiàn)一個(gè)線程對(duì)該變量加1,另一個(gè)線程對(duì)該變量減1 // 這兩個(gè)線程的操作加一,減一交替,進(jìn)行10輪,變量的初始值為0 // 1 高內(nèi)聚低耦合的前提下,線程操作資源類 // 2 判斷/干活/通知 // 3 多線程交互中,必須要防止多線程的虛假喚醒,也即(判斷只用while,不能用if)public class ThreadWaitNotifyDemo {public static void main(String[] args) {AirConditioner airConditioner=new AirConditioner();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(200);airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"A").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(300);airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"B").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(400);airConditioner.increment();} catch (InterruptedException e) {e.printStackTrace();}}},"C").start();new Thread(()->{for (int i = 1; i <=10 ; i++) {try {Thread.sleep(500);airConditioner.decrement();} catch (InterruptedException e) {e.printStackTrace();}}},"D").start();} }



總結(jié)

以上是生活随笔為你收集整理的线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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