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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java for循环 等待_java – 主题:忙等待 – 空循环

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java for循环 等待_java – 主题:忙等待 – 空循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參見英文答案 > Is this starvation?????????????????????????????????????2個

在我們的大學課程中,我們學習了Threads并使用“Busy Waiting”方法作為在TrafficLight等待的汽車的示例.為此,我們構建了三個類:

> TrafficLight(實現Runnable)

>汽車(實現Runnable)

>主要

在我們的Main類中,我們啟動兩個Thread,一個是Car,另一個是TrafficLight. Car具有布爾屬性hasToWait.這個類中的run()方法的工作方式是,只要hasToWait == true,它就可以通過while循環工作.要更改此設置,我們在Car類中使用notifyCar()方法,TrafficLight使用該方法. TrafficLight中的run()方法運行Thread.sleep()來模擬一定的等待時間.

我教授的一切都很好,但最終我遇到了嚴重的問題.只要Car類中的while循環為空.當我輸入一個非空的System.out.println()時,它可以工作.但是如果Syso為空,則結果是不顯示Run of Run方法.

當TrafficLight中的Thread.sleep()為0時,它也工作.它比空的while循環工作.

這是我的代碼:

Car.java:

package trafficlight;

public class Car implements Runnable {

private boolean hasToWait = true;

public void run() {

this.crossTrafficLight();

}

public void crossTrafficLight() {

while(hasToWait){ for(int i = 0; i<20; i++){System.out.println("123");}} // Busy waiting

System.out.println("Auto f?hrt über Ampel");

}

public void notifyCar() {

this.hasToWait = false;

System.out.println("Test");

}

}

TrafficLight.java:

package trafficlight;

public class TrafficLight implements Runnable {

private Car car;

public TrafficLight(Car car) {

this.car = car;

}

@Override

public void run() {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

this.car.notifyCar();

}

}

Main.java:

package trafficlight;

public class Main {

public static void main(String[] args){

Car car = new Car();

TrafficLight tl = new TrafficLight(car);

new Thread(car).start();

new Thread(tl).start();

}

}

問題出在哪兒?為什么它適用于我的教授而不是我的電腦?我使用JRE 1.7在Eclipse Juno中獲得了1:1的代碼

解決方法:

除了this other answer中所說的所有內容(只需用你的hasToWait代替完成該答案),代碼在添加println時開始工作的原因如下:

> println是一種同步方法;

>你在兩個線程中調用它;

>這會在兩個線程之間創建一個先發生的關系;

>因此,對子線程可以看到對布爾標志的寫入.

你可以說它開始大多是偶然的工作:你正在捎帶println中正在進行的同步.

標簽:java,eclipse,multithreading,busy-waiting

來源: https://codeday.me/bug/20190624/1280401.html

總結

以上是生活随笔為你收集整理的java for循环 等待_java – 主题:忙等待 – 空循环的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。