を待つために、スレッドを作るためにどのようにマルチスレッドのJavaあなたは私がこの問題を解決することができます:。いくつかの時間
駐車場の問題
「はありますn個の駐車場1つの駐車場には、一つだけの車があることができすべての駐車場が占有されていれば、車はしばらく待っていて、無料の駐車場がまだ残っていなければ、それは去っていく」
スレッドを使用して解決する必要があります(意志に同期)。
はここ何私のコード:
class Parking implements Runnable {
private Thread thread;
private String threadName;
static int parkingLots;
static {
parkingLots = 5;
}
Parking(String threadName) {
this.threadName = threadName;
}
public void run() {
if (parkingLots > 0) {
long restTime = (long) (Math.random() * 2000);
try {
parkingLots--;
System.out.println("Car " + threadName + " stands in the parking lot");
Thread.sleep(restTime);
} catch (InterruptedException e) {
}
parkingLots++;
System.out.println("Car " + threadName + " has left parking, it stood there" + ((double)restTime/(double)1000) + " s");
} else
System.out.println("Car " + threadName + " has left parking");
}
public void start() {
if (thread == null) {
thread = new Thread(this, threadName);
thread.start();
}
}
}
メイン
駐車場私が見たいと思って何
public class Main {
public static void main(String[] args) {
ArrayList<Parking> parking = new ArrayList<Parking>();
for (int i = 0; i < 15; i++) {
parking.add(new Parking(String.valueOf(i + 1)));
}
for (Parking i: parking) {
i.start();
}
}
}
(2つの駐車場や4台がある場合):
をCar 1 stands in the parking lot
Car 2 stands in the parking lot
Car 3 is waiting
Car 4 is waiting
Car 3 has left parking
Car 2 has left parking, it stood there 1.08 s
Car 4 stands in the parking lot
Car 1 has left parking, it stood there 1.71 s
Car 4 has left parking, it stood there 0.83 s
しかし、私は(駐車場2台と車4台の場合)、駐車場に立っているすべての最初の車(1と2)と他の車(3と4)は無料の駐車場がないので、たとえ15台の車があっても、彼らはまだそこに入ることができません。
車を離れる前にしばらく待つことができますか?無料の駐車場がある場合、駐車場を残すために駐車場があります。
助けていただけたら幸いです!ありがとう!
、このコードがあることをいくつかの深刻なリファクタリングを必要とします –
'Runnable'の中に' Thread'を置かないでください。それは別の方法です。プライマリクラスをコーディネーターと考えてください。 'Runnable#run'メソッドを持つ' ParkingLot'型と 'Car'型のスレッドとインスタンス化の詳細を管理します。 –