I know about synchronization, my question is not to synchronize thread. I want to ask why is the output so different if I just remove first print statement inside if condition. Suddenly else statement starts to get executed in every case. Why?
class Covid{
int slot = 10;
void bookslot(int selected){
if(slot >= selected){
System.out.println(selected+ " booked");
slot = slot-selected;
System.out.println("Left slots are "+ slot);
}else{
System.out.println("unavailale slots");
}
}
}
class People extends Thread{
static Covid cv;
int slect;
public void run(){
cv.bookslot(slect);
}
}
public class Main{
public static void main(String[] args) {
People.cv = new Covid();
People t1 = new People();
t1.slect = 7;
t1.start();
People t2 = new People();
t2.slect = 6;
t2.start();
}
}
Output: 7 booked 6 booked Left slots are 3 Left slots are -3
CASE2 when print is removed (rest code is same, only one line commented out)
class Covid{
int slot = 10;
void bookslot(int selected){
if(slot >= selected){
//System.out.println(selected+ " booked");
slot = slot-selected;
System.out.println("Left slots are "+ slot);
}else{
System.out.println("unavailale slots");
}
}
}
class People extends Thread{
static Covid cv;
int slect;
public void run(){
cv.bookslot(slect);
}
}
public class Main{
public static void main(String[] args) {
People.cv = new Covid();
People t1 = new People();
t1.slect = 7;
t1.start();
People t2 = new People();
t2.slect = 6;
t2.start();
}
}
OUTPUT unavailale slots Left slots are 3