Надеюсь, что мне тут помогут, потому что я уже 3 дня пытаюсь понять эту программу
Суть программы- реализация методов для приостановки, возобновления и останова потока.
Код взят из книги Герберта Шилдта для начинающих, 9-е издание. Страница 447. Писал я его не точь-в-точь, но думаю суть ясна.
class MyThread implements Runnable{
Thread thrd;
boolean suspended;
boolean stopped;
MyThread(String name){
thrd= new Thread(this,name);
suspended=false;
stopped=false;
}
public static MyThread createAndStart(String name){
MyThread mt = new MyThread(name);
mt.thrd.start();
return mt;
}
public void run(){
try{
for(int i=1;i<1000;i++){
System.out.print(i + " ");
if(i%10==0){
System.out.println();
Thread.sleep(250);
}
synchronized(this){
while(suspended) wait();
if(stopped) break;
}
}
}
catch(InterruptedException e){
}
}
synchronized void myStop(){
stopped=true;
suspended=false;
notify();
}
synchronized void mySuspend(){
suspended = true;
}
synchronized void myResume(){
suspended=false;
notify();
}
}
public class Suspend {
public static void main(String[] args){
MyThread mt1 = MyThread.createAndStart("Thread 1");
try{
Thread.sleep(1000);
mt1.mySuspend();
Thread.sleep(1000);
mt1.myResume();
Thread.sleep(1000);
mt1.mySuspend();
Thread.sleep(1000);
mt1.myResume();
Thread.sleep(1000);
mt1.mySuspend();
mt1.myStop();
}
catch(InterruptedException e){
}
}
}
Теперь к моим вопросам:
1) конструкцию synchronized(this) мой мозг отказывается понимать. Зачем она нужна, если методы и так synchronized? Да и что мы в этом блоке синхронизируем? Операторы while и if???
2) зачем в методе main используется Thread.sleep() если суть синхронизации как раз в том чтоб потоки автоматически получали доступ к объекту?
3) В книге в предыдущих упражнения обычно создавался отдельный класс, и через его методы потоки уже выполняли свои дела, а в этой программе для этого используется сам же класс, который реализует интерфейс Runnable. Это вообще как и нафига??!
Буду премного благодарен за пояснения