Multithreading in Java

Filed Under: Java

Multithreading in Java is a very important topic. I have written a lot about Threads in Java. Java Thread is a lightweight process that executes some task. Java provides multithreading support with the Thread class and an application can create multiple threads executing concurrently.

Multithreading in Java

multithreading in java, threads in java, java multithreading

There are two types of threads in an application – user thread and daemon thread. When we start an application, main is the first user thread created and we can create multiple user threads as well as daemon threads. When all the user threads are executed, JVM terminates the program.

We can set different priorities to different Threads but it doesn’t guarantee that higher priority thread will execute first than lower priority thread. Thread scheduler is the part of Operating System implementation and when a Thread is started, it’s execution is controlled by Thread Scheduler and JVM doesn’t have any control on it’s execution.

We can create Threads by either implementing Runnable interface or by extending Thread Class.

Thread t = new Thread(new Runnable(){
    public void run() {

Above is a one liner statement to create new Thread, Here we are creating Runnable as Anonymous Class, read this post to learn about inner class, nested class and anonymous inner class.

In last few weeks, I have posted some useful articles on multithreading in java, you can follow them in order to learn about Threads in Java.

Threads in Java

java thread, multithreading in java, threads in java

With Java 8 lambda expressions, we can create Thread in java like below too because Runnable is a functional interface.

Thread t = new Thread(() -> {System.out.println("My Runnable");});
  1. Java Thread Example

    This is the first post in the multithreading in java tutorial series. Read this to learn about Process and Thread. What is the difference between Thread and Process. Benefits of using Threads and how we can create Threads using Runnable interface and Thread class. This post also compares Runnable interface with Thread class.

  2. Java Thread Sleep

    Java Thread sleep is used to pause the execution of current thread. We will use Thread sleep extensively in future posts, so it’s good to know how it works and is it accurate or not?

  3. Java Thread Join

    Sometimes we need to wait for other threads to finish it’s execution before we can proceed. We can achieve this using Thread join, learn how it works and when we should use it.

  4. Java Thread States

    Understanding different states of thread is important. Learn how thread changes it’s state and how thread scheduler changes thread state.

  5. Java Thread wait, notify and notifyAll

    Java Object class contains three methods using which threads can communicate about the lock status of a resource. Learn with example usage of these Object class methods in a simple Wait-Notify implementation.

  6. Java Thread Safety and Java Synchronization

    We know that Threads share Object resources, it can lead to data corruption because these operations are not atomic. Learn how we can achieve thread safety in java using different methods. Read this post to learn about the correct usage of synchronization, synchronized methods and synchronized blocks.
    There are various examples of synchronized usage and the post explains what are the issues with them.

  7. Java Exception in thread main

    JVM creates first thread using main method. This post explains about some common exceptions we see in daily life and what is the root cause of them and how to fix them.

  8. Thread Safety in Singleton Class

    In this article, you will learn basic concepts of creating Singleton class. What are thread safety issues with different implementation. How we can achieve thread safety in Singleton class.

  9. Daemon Thread in Java

    A simple article explaining about daemon threads and how we can create daemon threads in java.

  10. Java Thread Local

    We know that threads share Object’s variables but what if we want to have thread-local variables created at class level. Java provides ThreadLocal utility class to create thread-local variables. Read more to learn about how we can create ThreadLocal variables in java program.

  11. Java Thread Dump

    Java Thread dump provides the current threads information for the program. Java Thread dump provides useful information to analyze performance issues with the application. You can use thread dump to find and fix deadlock situations. This post explains different methods that can be used to generate thread dump in java.

  12. How to Analyze Deadlock and avoid it in Java

    Deadlock is a situation where multiple threads are waiting for each other to release resources causing cyclic dependency. This article discusses about the situation in which we can get deadlock in a java program. How we can use Thread dump to find the deadlock and best practices to avoid deadlock in java program.

  13. Java Timer Thread

    This post explains how we can use Java Timer and TimerTask classes to create jobs to run at scheduled interval, an example program showing it’s usage and how we can cancel the timer.

  14. Java Producer Consumer Problem

    Before Java 5, producer-consumer problem can be solved using wait() and notify() methods but introduction of BlockingQueue has made it very easy. Learn how we can use BlockingQueue to solve producer consumer problem in java.

  15. Java Thread Pool

    Java Thread Pool is a collection of worker threads waiting to process jobs. Java 5 introduction of Executor framework has made it very easy to create thread pool in java using Executors and ThreadPoolExecutor classes. Learn how to use them to create thread pool in java.

  16. Java Callable Future

    Sometimes we wish Thread could return values that we can use. Java 5 Callable can be used in that case that is similar as Runnable interface. We can use Executor framework to execute Callable tasks.

  17. Java FutureTask Example

    FutureTask class is the base concrete class that implements Future interface. We use it with Callable implementation and Executors for asynchronous processing. FutureTask provide implementation methods to check the state of the task and return the value to the calling program once it’s processing is finished. It comes handy when you want to override some of the implementation methods of the Future interface.

This list will keep growing as I write more on multithreading in java, so make sure to bookmark it for future use.


  1. Deepak says:

    Hi Pankaj
    Is your multithreading Tutorials updated for the recent Java version ? Which version of jdk it supports ?

    Do reply.

  2. Lacarte says:

    Thanks for all examples

  3. Vaibhav Gupta says:

    Can u help me with the code for database query optimisation using threads??

  4. Shyam Patil says:

    Is this sentence is correct from your tutorial, We can set different priorities to different Threads but it doesn’t guarantee that higher priority thread will execute first than lower priority thread?

    I think, Priority threads are executed first. If I am wrong, could you please explain in which case higher priority thread is not executed before lesser priority.

    1. Pankaj says:

      Hi Shyam,

      We can set higher priority to a thread but it’s OS task to execute them. So it’s not in JVM hand to execute a thread with higher priority, it’s the responsibility of OS thread scheduler implementation. And OS can ignore the priority settings, that’s why it’s not guaranteed.

  5. Jramapurath says:

    Here body contains single statement, so curly braces is Optional Right ?

    Thread t = new Thread(() -> {System.out.println(“My Runnable”);});

    Can be written as

    Thread t = new Thread(() -> System.out.println(“My Runnable”));

  6. programinjava says:

    This is quiet helpful , good stuff and easy to understand good stuff is available at below link as well

  7. Mayur kohli says:

    hey thanks for this great information on multi threading in java. I have found this really helpful. Here you covered all the things regarding multi-threading and i was going through the same . It will be helpful if you post on thread priorities.

  8. Neeraj says:

    please explain about locking mechanism of thread ,
    what type of lock in java.
    how to implement it

  9. shahebaz says:

    how to print states of thread.

  10. Aliva says:

    Hi Pankaj,

    I have a doubt. How can we manage performance while 500 threads accessing a thread safe object? And each thread takes 1 min to complete its task.

  11. Raed says:

    Hi i am writing about the Thread above

    Thread t = new Thread(() -> {System.out.println(“My Runnable”);});;

    do you mean; or t.start(), ?


    1. Pankaj says:

      You are right, it should be t.start()

      I have updated the post.

      1. Raed says:

        Hello Pankaj

        do you know that the journalDev is great place to get important inforamtion.

        1. Abhay says:

          No, he probably don’t know

  12. Ankit Neema says:

    I like your articles very much. I was going through Multithreading article and I think almost all things are covered except about ForkJoinPool class in java. It will be of very much help to me as well as others as all articles will get consolidated at one place only. It will be of much help if you can write about it. Thanks

    1. Pankaj says:

      Okay, I will write on it in sometime.

  13. Suresh Yadam says:

    Hi Sir,

    There was a spelling mistake at ( of ) in the below line, please change it sir.

    We can create Threads by either implementing Runnable interface of by extending Thread Class.

    1. Pankaj says:

      Thanks for catching the typo error, I have corrected it.

  14. HI,
    I have tried to run Java thread example, but its run method is not calling. I just created MyThread and HeavyRunnable class through eclipse editor and add extends and implements Runnable by hand. Any issue. Thanks.

    1. Pankaj says:

      Without looking at your code it’s hard to tell the exact issue. Please post the code here in comments and I will check it.

  15. Gitanjali says:

    it has given me a use full tips for me and it helped me to understand

    1. Pankaj says:

      you are welcome Gitanjali.

  16. keval patel says:

    Sir i want program definitions list in core java.

    1. Pankaj says:

      Not sure what you meant here.

  17. Tan says:

    Very helpful post. Can you post locks concept in Threads.

    1. Pankaj says:

      Thanks for the input, I would post something on Thread Lock soon.

  18. Mohamed says:

    Please can you tell me how to print the Future values as in Example 16(Callable task) in example 17(FutureTask )?

Leave a Reply

Your email address will not be published. Required fields are marked *

Generic selectors
Exact matches only
Search in title
Search in content