Pausing a Thread

The proper way to temporarily pause the execution of another thread is to set a variable that the target thread checks occasionally. When the target thread detects that the variable is set, it calls Object.wait(). The paused thread can then be woken up by calling its Object.notify() method.

Note: Thread.suspend() and Thread.resume() provide methods for pausing a thread. However, these methods have been deprecated because they are very unsafe. Using them often results in deadlocks. With the approach above, the target thread can ensure that it will be paused in an appropriate place.

// Create and start the thread MyThread thread = new MyThread(); thread.start(); while (true) { // Do work // Pause the thread synchronized (thread) { thread.pleaseWait = true; } // Do work // Resume the thread synchronized (thread) { thread.pleaseWait = false; thread.notify(); } // Do work } class MyThread extends Thread { boolean pleaseWait = false; // This method is called when the thread runs public void run() { while (true) { // Do work // Check if should wait synchronized (this) { while (pleaseWait) { try { wait(); } catch (Exception e) { } } } // Do work } } }

Comments

16 Mar 2010 - 7:37pm by Anonymous (not verified)

Is it possible to provide a small example with two buttons (pausing and resuming) using these threats? Say for example to count from 1 to 1000.

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.