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
}
}
}
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.