0% found this document useful (0 votes)
3 views7 pages

Java Flight Reservation System Code

The document contains code for a multi-threaded flight reservation system that uses ReadWriteLocks to synchronize access to shared flight data. It includes classes for clients, flights, readers that query reservations, and writers that make and cancel reservations. The main method launches reader and writer threads to concurrently access a synchronized flight instance, demonstrating the use of read-write locks to allow multiple reader threads while only one writer can access the data at a time.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views7 pages

Java Flight Reservation System Code

The document contains code for a multi-threaded flight reservation system that uses ReadWriteLocks to synchronize access to shared flight data. It includes classes for clients, flights, readers that query reservations, and writers that make and cancel reservations. The main method launches reader and writer threads to concurrently access a synchronized flight instance, demonstrating the use of read-write locks to allow multiple reader threads while only one writer can access the data at a time.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

Client.

java

public class Client {

private static int i;


private final int id;

Client() {
[Link] = i++;
}

@Override
public String toString() {
return [Link]([Link]);
}

@Override
public int hashCode() {
return id;
}
}

[Link]

buffer class'ý

public interface Flight {

public Client[] queryReservation() throws InterruptedException;


public void cancelReservation(int seatNo) throws InterruptedException;
public void makeReservation(Client client, int seatNo) throws
InterruptedException;
public int seatCount();
}

[Link]

import [Link];

import [Link];

public class Main {

public static void main(String[] args) {

//thread havuzu oluþturulur

ExecutorService application = [Link]();

//thread'ler tanýmlanýr ve çalýþtýrýlýr


Flight flight = new SynchronizedFlight(15);

[Link](new Reader(flight));

[Link](new Reader(flight));

[Link](new Reader(flight));

[Link](new Reader(flight));

[Link](new Writer(flight));

[Link](new Writer(flight));

[Link](new Writer(flight));

[Link](new Writer(flight));

[Link](new Writer(flight));

[Link]();

[Link]

/* = Reader = Consumer */

import [Link];

public class Reader implements Runnable {

private final static Random generator = new Random();


private final Flight flight; //thread'ler tanýmlanýr ve çalýþtýrýlýr

//constructor tanýmlanýr
public Reader(Flight flight) {
[Link] = flight;
}

//thread'in genel run metodu


@Override
public void run() {
for (int count=0; count<[Link]()*1.5; count++) {
try {
[Link]([Link](3000));
displaySeats([Link]());
} catch (InterruptedException e) {
[Link]();
}
}
[Link]("\n\n\t\tqueryReservation done!\n");
}
// koltuklarýn bilgisinin dizisinin yazdýrýldýðý metot
public static void displaySeats(Client[] arr) {
[Link]("\n operation: %16s | seats: ", "queryReservation");
for (int i=0;i<[Link];i++) {
[Link]("[%d|%s]", i, (arr[i] == null) ? "null": arr[i]);
}
[Link]("[%s|%s]", "seatNo", "clientNo");
}
}

[Link]

import [Link].*;

class SynchronizedFlight implements Flight {

/* Bir ReadWriteLock uygulamasý aþaðýdaki davranýþlarý garanti eder:

Verileri güncelleyen hiçbir iþ parçacýðý olmadýðý sürece birden çok iþ parçacýðý


ayný anda verileri okuyabilir.

Verileri bir defada güncelleyebilen yalnýzca bir iþ parçacýðý yazma kilidi


serbest býrakýlýncaya kadar diðer iþ parçacýklarýna (hem okuyucular hem de
yazarlar) blok yapmaya neden olur.

Bir iþ parçacýðý diðer iþ parçacýklarý okurken verileri güncelleþtirmeye


çalýþýrsa, iþ parçacýðý okuma kilidi serbest býrakýlana kadar da engeller. */

private ReadWriteLock accessLock = new ReentrantReadWriteLock();

private final Lock readLock = [Link]();

private final Lock writeLock = [Link]();

private final Client[] seats; //client tipinde bir oturma yeri dizisi
tanýmlanýr

SynchronizedFlight() {

this(10); //seatsCount olarak 10 döndürür

SynchronizedFlight(int seatsCount) {

[Link] = new Client[seatsCount]; //seats dizisine boyut atanýr


}

//queryReservation() metodu tanýmlanýr.

@Override

public Client[] queryReservation() throws InterruptedException {

[Link]();

Client[] s;

try {

s = [Link];

} finally {

[Link]();

return s;

@Override

public void cancelReservation(int seatNo) throws InterruptedException {

[Link]();

try {

seats[seatNo] = null;

} finally {

[Link]();

//makeReservation() method

@Override

public void makeReservation(Client client, int seatNo) throws


InterruptedException {
[Link]();

try {if (seats[seatNo]==null) seats[seatNo] = client;

else [Link]("\nYou can't choose it. You must choose another


seat");

//seats[seatNo] = client

} finally {

[Link]();

@Override

public int seatCount() {

return [Link];

[Link]

/* = Writer = Producer */

import [Link];

import [Link];

import [Link];

public class Writer implements Runnable {

private final static Random generator = new Random();


private final Flight flight;

private ArrayList<Integer> list;

//constructor

public Writer(Flight flight) {

[Link] = flight;

list = new ArrayList<>();

for (int i=0; i<[Link](); i++) {

[Link](i);

[Link](list);

@Override

public void run() {

for (int count=0; count<[Link](); count++) {

try {

//makeReservation

[Link]([Link](3000));

Client newClient = new Client();

displayState("makeReservation", [Link](count));

[Link](newClient, [Link](count));

} catch (InterruptedException e) {

[Link]();

for (int i=0;i<[Link]()/2;i++) {


try {

//cancelReservetion

[Link]([Link](3000));

displayState("cancelReservation", [Link](i));

[Link]([Link](i));

} catch (InterruptedException e) {

[Link]();

[Link]("\n\n\t\tcancelReservation and makeReservation done!\


n");

private void displayState(String operation, int seatNo) {

[Link]("\n operation: %16s | seatNo: %d ", operation, seatNo);

You might also like