File-1
Test.java
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Bucket bckt = new Bucket();
Scanner s = new Scanner(System.in);
System.out.print("How many elements do you want to add initialy ? :");
int num = s.nextInt();
//Fill bucket initially
for(int i=0;i<num;i++){
System.out.print("Enter element " +(i+1)+ " : ");
int val = s.nextInt();
bckt.insert(val);
}
bckt.display(); //display current bucket status
DeleteThread delThread = new DeleteThread(bckt); //Call delete thread
InsertThread insThread = new InsertThread(bckt); //Call insert thread
}
}
File-2
Bucket.java
public class Bucket {
static int MAX=100; //Capacity of bucket
int bcktQueue[] = new int[100];
int front=-1, rear=0; //variable to access circular queue
public Bucket(){
}
//Insertion operation in Circular Queue
public void insert(int val){
if(front == -1)
front = 0;
if(rear<MAX){
bcktQueue[rear] = val;
rear++;
}
else if(rear>=MAX && front>0){
rear = 0;
bcktQueue[rear] = val;
rear++;
}
else if(rear==MAX-1 && front==MAX-1){
rear = 0;
bcktQueue[rear] = val;
rear++;
}
else if((front==0 && rear==MAX-1) || (front>0 && rear==front)){
System.out.println("......BUCKET OVERFLOW......");
}
}
//Delete operation in Circular Queue
public void delete(){
if(front == -1){
System.out.println(".......BUCKET IS EMPTY (Underflow).......");
}
else if(front == rear-1){
System.out.println("Element " + bcktQueue[front] + " with index " + front + " is deleted");
front = -1;
rear = 0;
}
else if(front == MAX-1){
System.out.println("Element " + bcktQueue[front] + " with index " + front + " is deleted");
front = 0;
}
else{
System.out.println("Element " + bcktQueue[front] + " with index " + front + " is deleted");
front++;
}
}
//Display current state of bucket
public void display(){
if(front == -1 && rear == 0){
System.out.println("Bucket is EMPTY");
}
else if(front < rear){
System.out.println("Current bucket is...");
for(int i=front;i<=rear-1;i++){
System.out.println(bcktQueue[i]);
}
}
else{
System.out.println("Current bucket is...");
for(int i=front;i<MAX;i++){
System.out.println(bcktQueue[i]);
}
for(int i=0;i<=rear;i++){
System.out.println(bcktQueue[i]);
}
}
}
}
File-3
DeleteThread.java
public class DeleteThread implements Runnable {
Thread delThread;
Bucket bckt1; //bckt1 is an instance of Bucket class
public DeleteThread(){
}
public DeleteThread(Bucket bckt){
this.bckt1 = bckt; //create a reference
delThread = new Thread(this);
delThread.start();
}
@Override
public void run() {
try{
while(true){
bckt1.delete();
Thread.sleep(2000);
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
File-4
InsertThread.java
import java.io.*;
import java.util.*;
public class InsertThread implements Runnable {
Thread insThread;
Bucket bckt1;
public InsertThread(){
}
public InsertThread(Bucket bckt){
bckt1 = bckt;
insThread = new Thread(this);
insThread.start();
}
@Override
public void run() {
try{
String c = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press Y to insert elements into bucket");
System.out.println("Press N to do not insert elements into bucket");
System.out.print("Enter your choice:");
try{
c = br.readLine();
}
catch(Exception e){
e.printStackTrace();
}
if(c.equals("y") || c.equals("Y")){
int num;
Scanner s = new Scanner(System.in);
System.out.println("How many elements you want to add in bucket ? :");
num = s.nextInt();
for (int i=0;i<num;i++){
int val;
System.out.print("Enter value of element :");
val = s.nextInt();
bckt1.insert(val);
}
Thread.sleep(7000);
}
else if(c.equals("n") || c.equals("N")){
try{
Thread.sleep(5000);
}
catch(Exception e){
e.printStackTrace();
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}