Important Methods of the Thread Class

Thread class has many important methods like init, start, stop, run, getName(), getPriority(), isAlive() and join(), and also few static methods like sleep(), yield() etc. Usually we override only the run() method and use the inherited versions of init, start etc


start() and run()

Invoking the start() method on a thread object executes the run() method as a new thread of execution. When you call the start method for a thread object, it will call a native code method that causes the OS to initiate another thread from which the run() method executes. We can call start method only once on a thread or it will throw IllegalStateException. 

You can also call the run method directly, but if you call the run() method directly, it would simply operate like any other method and will run as part of the same thread that called it.


final isAlive()

The final isAlive() method returns true if the thread is still running or the Thread has not terminated.


final join()

The final join() method waits until thread on which it is called is terminated. For example, thread1.join() suspends the current thread until thread1 dies.

You can also pass a long value to join method to specify the number of milliseconds you are prepared to wait for the death of a thread. For example, thread1.join(1000) wait upto 1 second for thread1 to die, and then continue execution.

The join() method can throw an InterruptedException if the current thread is interrupted by another thread.



Calling yield() will move the current thread from running to runnable, to give other threads a chance to execute. However the scheduler may still bring the same thread back to running. A better alternative according to Effective Java by Joshua Bloch is to use Thread.sleep(1) instead of Thread.yield().


interrupt(), isInterrupted() and interrupted()

Thread’s stop() method is deprecated and should not be used. Instead, you should use the interrupt mechanism.

A thread can signal another thread that it should stop executing by calling the interrupt() method for that thread. This doesn’t stop the thread, but sets a flag in the thread. This flag must be checked in the run() method to have any effect and the thread should then terminate itself.

The isInterrupted() method returns true if the interrupted flag has been set. This method does not reset the flag, but another static method interrupted() tests the flag for the currently executing thread and if it has been interrupted, it clears the interrupted flag in the current thread object and returns true.

When an InterruptedException is thrown, the flag that registers the interrupt is cleared, so a subsequent call to isInterrupted() or interrupted() returns false.


static currentThread()

The static currentThread() method returns a reference to the thread in which it is called.


static sleep() 

This static sleep() method causes the thread to suspend execution for a given time. The sleep method has two overloaded versions:

  • static void sleep (long milliseconds) throws InterruptedException

  • static void sleep (long milliseconds, int nanoseconds) throws InterruptedException


Deprecated Methods

Thread.stop, Thread.suspend and Thread.resume are deprecated. You can find the reasons for deprecating them at:

For more details on thread methods, you can refer to the java documentation for Thread class at:

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)