Учебники

Параллелизм Java — основные операции

Core Java обеспечивает полный контроль над многопоточной программой. Вы можете разработать многопоточную программу, которую можно приостановить, возобновить или полностью остановить в соответствии с вашими требованиями. Существуют различные статические методы, которые вы можете использовать в объектах потоков для управления их поведением. В следующей таблице перечислены эти методы —

Sr.No. Метод и описание
1

public void suspend ()

Этот метод переводит поток в состояние ожидания и может быть возобновлен с помощью метода resume ().

2

общественная недействительная остановка ()

Этот метод полностью останавливает поток.

3

общедоступное резюме ()

Этот метод возобновляет поток, который был приостановлен с помощью метода suspend ().

4

public void wait ()

Заставляет текущий поток ждать, пока другой поток не вызовет notify ().

5

public void notify ()

Просыпается один поток, который ожидает на мониторе этого объекта.

public void suspend ()

Этот метод переводит поток в состояние ожидания и может быть возобновлен с помощью метода resume ().

общественная недействительная остановка ()

Этот метод полностью останавливает поток.

общедоступное резюме ()

Этот метод возобновляет поток, который был приостановлен с помощью метода suspend ().

public void wait ()

Заставляет текущий поток ждать, пока другой поток не вызовет notify ().

public void notify ()

Просыпается один поток, который ожидает на мониторе этого объекта.

Имейте в виду, что в последних версиях Java не рекомендуется использовать методы suspend (), resume () и stop (), поэтому вам необходимо использовать доступные альтернативы.

пример

Live Demo

class RunnableDemo implements Runnable {
   public Thread t;
   private String threadName;
   boolean suspended = false;

   RunnableDemo(String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );

      try {
         
         for(int i = 10; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);

            // Let the thread sleep for a while.
            Thread.sleep(300);

            synchronized(this) {
               
               while(suspended) {
                  wait();
               }
            }
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }

   public void start () {
      System.out.println("Starting " +  threadName );
      
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
   
   void suspend() {
      suspended = true;
   }
   
   synchronized void resume() {
      suspended = false;
      notify();
   }
}

public class TestThread {

   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo("Thread-1");
      R1.start();

      RunnableDemo R2 = new RunnableDemo("Thread-2");
      R2.start();

      try {
         Thread.sleep(1000);
         R1.suspend();
         System.out.println("Suspending First Thread");
         Thread.sleep(1000);
         R1.resume();
         System.out.println("Resuming First Thread");
         
         R2.suspend();
         System.out.println("Suspending thread Two");
         Thread.sleep(1000);
         R2.resume();
         System.out.println("Resuming thread Two");
      } catch (InterruptedException e) {
         System.out.println("Main thread Interrupted");
      } try {
         System.out.println("Waiting for threads to finish.");
         R1.t.join();
         R2.t.join();
      } catch (InterruptedException e) {
         System.out.println("Main thread Interrupted");
      }
      System.out.println("Main thread exiting.");
   }
}

Вышеуказанная программа производит следующий вывод —