C# Thread Priority in Multithreading

Last Updated : 28 Apr, 2026

In a multithreaded environment, each thread has a priority that influences how the thread is scheduled for CPU execution by the operating system. The Thread.Priority property in C# is used to set or get the priority of a thread.

  • Explicit Control: Developers can manually set or retrieve a thread's priority using the Priority property.
  • Default State: Every new thread inherits the priority of the creating thread (which is typically Normal) unless changed.
  • OS Influence: While the Operating System manages scheduling, priorities act as a "hint" to favor certain threads.
  • Thread Starvation: Setting priorities too high for some threads can "starve" lower-priority ones, preventing them from running.
  • No Execution Guarantee: High priority doesn't guarantee a thread will finish first; OS context switching still applies.
  • Process Dependency: A thread's actual power is limited by the priority of its parent Process.

Thread Priority Levels

The ThreadPriority enum under the System.Threading namespace specifies the following priority levels:

Priority Level

Description

Value

Highest

Highest priority for a thread.

4

AboveNormal

Higher than Normal priority.

3

Normal (Default)

Default priority.

2

BelowNormal

Lower than Normal priority.

1

Lowest

Lowest priority for a thread.

0

Syntax:

public ThreadPriority Priority{ get; set; }

Exceptions:

  • ThreadStateException: If the thread has reached a final state, such as Aborted.
  • ArgumentException: If the value specified for a set operation is not a valid ThreadPriority value.

Example 1: This example demonstrates how to set and get the priority of threads.

C#
using System;
using System.Threading;

class Geeks
{
	static public void Main()
	{
		// Creating and initializing threads 
		Thread T1 = new Thread(work);
		Thread T2 = new Thread(work);
		Thread T3 = new Thread(work);

		// Set the priority of threads 
		T2.Priority = ThreadPriority.Highest;
		T3.Priority = ThreadPriority.BelowNormal;
		T1.Start();
		T2.Start();
		T3.Start();

		// Display the priority of threads 
		Console.WriteLine("The priority of T1 is: {0}",
		T1.Priority);

		Console.WriteLine("The priority of T2 is: {0}",
		T2.Priority);

		Console.WriteLine("The priority of T3 is: {0}",
		T3.Priority);
	}

	public static void work()
	{
		// Sleep for 100 milliseconds
		Thread.Sleep(100);
	}
}

Output
The priority of T1 is: Normal
The priority of T2 is: Highest
The priority of T3 is: BelowNormal

Example 2: This example demonstrates how thread priority can influence thread execution.

C#
using System;
using System.Threading;

class Geeks
{
	static public void Main()
	{

		// Creating and initializing threads 
		Thread T1 = new Thread(work1);
		Thread T2 = new Thread(work2);

		// Set the priority of threads 
		// Here T2 thread executes first 
		// because the Priority of T2 is 
		// highest 
		T1.Priority = ThreadPriority.Lowest;
		T2.Priority = ThreadPriority.Highest;
		T1.Start();
		T2.Start();
	}
	public static void work1()
	{
		Console.WriteLine("T1 thread is working..");
	}
	public static void work2()
	{

		Console.WriteLine("T2 thread is working..");
	}
}

Output
T1 thread is working..
T2 thread is working..
Comment

Explore