Я пытаюсь добиться того, чтобы создать 2 потока, совместно использующих общий статический логический ресурс, чтобы в зависимости от значений флага выходил первый поток, но первый поток все равно работал.
Это кодниже,
class SharedResource08{
public synchronized void doIt() throws Exception{
while(!SharedResource07.getBFlag()){
System.out.println(" THE THREAD "+Thread.currentThread().getName());
Thread.sleep(250);
}
}
}
class SharedResource07{
private static boolean bFLag = false;
public static synchronized void setBFlag(boolean bFLag){
bFLag = bFLag;
System.out.println(" THREAD "+Thread.currentThread().getName()+" setting value bFLag := "+bFLag);
}
public static boolean getBFlag(){
return bFLag;
}
}
class MyThread07 extends Thread{
private SharedResource08 resource;
MyThread07(String threadName,SharedResource08 resource){
super(threadName);
this.resource = resource;
}
public void run(){
try{
if(getName().equals("JACK")){
resource.doIt();
}else if(getName().equals("JILL")){
SharedResource07.setBFlag(true);
}
}catch(Exception e){
System.out.println(e);
}
}
}
public class Ex07{
public static void main(String[] args){
SharedResource08 resource = new SharedResource08();
MyThread07 t1 = new MyThread07("JACK",resource);
MyThread07 t2 = new MyThread07("JILL",resource);
t1.start();
t2.start();
}
}
Я ожидаю, что поток t1 выполнит метод doit () класса SharedResource08, в то время как второй поток t2 должен установить для флага bFLag класса SharedResource07 значение true, теперь один разэтот флаг имеет значение true, поток t1 должен выйти из метода doIt (),
, но этого не происходит, мой поток t1 продолжает печатать SOP.
Требуется некоторое предложение.