Thread Priorities in Java

Thread Priorities in Java

Thread priorities in Java are used to hint the thread scheduler about the relative importance of threads. Each thread has a priority, which helps the thread scheduler decide the order in which threads should be executed. The thread priority is an integer value ranging from Thread.MIN_PRIORITY (1) to Thread.MAX_PRIORITY (10), with the default being Thread.NORM_PRIORITY (5).

How to Set Thread Priorities

You can set the priority of a thread using the setPriority(int newPriority) method of the Thread class. Here’s how you can set thread priorities in Java:

  1. Using Constants:

    • Thread.MIN_PRIORITY: Minimum priority (1)
    • Thread.NORM_PRIORITY: Normal priority (5)
    • Thread.MAX_PRIORITY: Maximum priority (10)
  2. Using Integers:

    • Any integer between 1 and 10.
Example Program to Demonstrate Thread Priorities

Below is an example program that demonstrates how to set and use thread priorities:

class PriorityThread extends Thread {
    public PriorityThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(getName() + " with priority " + getPriority() + " is running");
            try {
                Thread.sleep(100); // Optional: To slow down the output for better visualization
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        PriorityThread thread1 = new PriorityThread("Thread 1");
        PriorityThread thread2 = new PriorityThread("Thread 2");
        PriorityThread thread3 = new PriorityThread("Thread 3");

        // Set different priorities
        thread1.setPriority(Thread.MIN_PRIORITY); // Priority 1
        thread2.setPriority(Thread.NORM_PRIORITY); // Priority 5
        thread3.setPriority(Thread.MAX_PRIORITY); // Priority 10

        // Start the threads
        thread1.start();
        thread2.start();
        thread3.start();

        try {
            // Wait for all threads to finish
            thread1.join();
            thread2.join();
            thread3.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Explanation
  1. PriorityThread Class:

    • Extends Thread and has a constructor to set the thread’s name.
    • The run method contains a loop that prints the thread’s name and priority, then sleeps for a short time to simulate work.
  2. Main Class:

    • Creates three PriorityThread instances with different names.
    • Sets different priorities for each thread using the setPriority method:
      • thread1 has the minimum priority (Thread.MIN_PRIORITY).
      • thread2 has the normal priority (Thread.NORM_PRIORITY).
      • thread3 has the maximum priority (Thread.MAX_PRIORITY).
    • Starts all three threads.
    • Waits for all threads to finish using the join method.
This program sets different priorities for three threads and starts them. The output shows how the threads with different priorities are executed, although the exact order and timing can vary depending on the Java Virtual Machine (JVM) and operating system's thread scheduling policies. Higher-priority threads are generally given more CPU time than lower-priority threads, but this is not guaranteed.
Important Notes
  • Thread priorities are just hints: The actual scheduling behavior depends on the underlying operating system and JVM implementation. Higher-priority threads may get more CPU time than lower-priority threads, but this is not guaranteed.
  • Thread starvation: If higher-priority threads are always runnable, lower-priority threads may starve (i.e., they may not get CPU time). Proper design should ensure fair access to CPU time for all threads.
  • Priority inversion: A scenario where lower-priority threads hold resources needed by higher-priority threads, causing the higher-priority threads to wait. This can be mitigated using proper synchronization techniques.

Comments

Popular posts from this blog

KTU OOP LAB JAVA CSL 203 BTech CS S3 - Dr Binu V P

Syllabus and Practice Questions KTU OOPS Lab Java CSL 203

String Problems