package StopAndResume;
public class NewThread implements Runnable {
String name;
Thread t;
boolean flag;
NewThread(String name)
{
this.name = name;
t = new Thread(this, name);
System.out.println("New Thread " + t);
flag = false;
t.start();
}
@Override
public void run() {
try{
for(int i = 15; i > 0; i--)
{
System.out.println(name + ": " + i);
Thread.sleep(5000);
synchronized (this) // ЗАЧЕМ ЭТО НУЖНО В ДАННОМ СЛУЧАЕ?
{
while(flag)
{
wait();
}
}
}
}catch (InterruptedException e)
{
System.out.println("Interrupted !");
}
System.out.println("Finish!!!!!");
}
synchronized void mysuspend()
{
flag = true;
}
synchronized void myresume()
{
flag = false;
notify();
}
}
class Demo{
public static void main(String[] args) {
NewThread obj1 = new NewThread("F_I_R_S_T");
NewThread obj2 = new NewThread("S_E_C_O_N_D");
try{
Thread.sleep(10000);
obj1.mysuspend();
System.out.println(obj1.name + " is suspended!");
Thread.sleep(10000);
obj1.myresume();
System.out.println(obj1.name + " is resumed!");
obj2.mysuspend();
System.out.println(obj2.name + " is suspended!");
Thread.sleep(10000);
obj2.myresume();
System.out.println(obj2.name + " is resumed!");
}catch (InterruptedException e){
System.out.println("Interrupted!");
}
try{
obj1.t.join();
obj2.t.join();
}catch (InterruptedException e){
System.out.println("Interrupted!");
}
}
}
Помогите пожалуйста разобраться , зачем нам нужна эта синхронизация в данном случае ? Как я ожидал , когда obj1 входит в этот метод и вызывает ожидание , то он должен блокировать вход obj2 так как он находиться в этом мониторе до тех пор пока не пробудится. Но obj2 не блокируется. Так вот ПОЧЕМУ obj2 не блокируется? И зачем нужна была эта синхронизация?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей