Java
Multithreading
Runnable Interface
Thread Management
Java Programming

How to stop a thread created by implementing runnable interface?

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

To effectively manage threads in Java, particularly those created by implementing the `Runnable` interface, it's crucial to understand reliable and clean ways to stop them. Java does not provide a direct method to stop a thread as it did with the now-deprecated `Thread.stop()` method, as such actions can lead to resource inconsistencies and corruption. Instead, Java encourages the use of cooperative mechanisms to stop threads safely.

Understanding Thread Lifecycle Management

When you implement a thread using the `Runnable` interface, you define the `run()` method, which is executed in a separate call stack. A common requirement is to be able to stop this execution cleanly and predictably when needed.

Cooperative Thread Termination

A better approach is to implement a cooperative mechanism that checks the thread's status regularly and terminates if a particular condition is met. This involves:

  1. Using a Volatile Flag: A common pattern is to use a `volatile` boolean variable to indicate whether a thread should continue running or terminate. The `volatile` keyword ensures that the variable is visible to all threads that read it.
  2. Checking the Flag in the `run()` Method: Within the `run()` method, periodically check the flag's value and exit the loop or terminate execution if the flag indicates that the thread should be stopped.

Here is a simple example to illustrate this approach:

  • A `volatile` boolean `running` is used to control the loop in the `run()` method.
  • `Thread.sleep()` is used to simulate work being done and can be interrupted by the thread.
  • The `stop()` method allows external control to signal the thread to stop.
  • Restore Interrupt Status: If you catch an `InterruptedException`, and it's appropriate to stop the thread, you might want to signal the interruption to other parts of the program by calling `Thread.currentThread().interrupt()`.
  • Graceful Termination: If a thread is performing a critical task and an interruption is detected, ensure no resources or locks are left in an inconsistent state.
  • Controlled Shutdown: This method ensures you have full control over when a thread terminates and how to handle ongoing tasks.
  • Avoiding Deprecated Methods: Rather than relying on `Thread.stop()`, this approach used properly aligned Java mechanisms fits well with the concurrency paradigm.
  • Remain Aware of Synchronization: While using the `volatile` keyword ensures visibility of changes, ensure no other synchronization issues arise when your threads interact with shared data.

Related reading
Course
Intermediate
27 lessons
14 hours
OOD Fundamentals

Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

All Rights Reserved.