{"id":9247,"date":"2025-03-25T14:57:11","date_gmt":"2025-03-25T14:57:11","guid":{"rendered":"http:\/\/localhost:8080\/csharp-test\/docs\/csharp\/threads\/multithreading\/"},"modified":"2025-03-27T12:29:50","modified_gmt":"2025-03-27T12:29:50","slug":"multithreading","status":"publish","type":"docs","link":"https:\/\/www.completecsharptutorial.com\/docs\/csharp\/threads\/multithreading\/","title":{"rendered":"Multithreading"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"9247\" class=\"elementor elementor-9247\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dabd32d e-flex e-con-boxed e-con e-parent\" data-id=\"dabd32d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a0b674b elementor-widget elementor-widget-heading\" data-id=\"a0b674b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Multithreading in C# \u2013 Run Multiple Tasks Faster<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-be29c38 e-flex e-con-boxed e-con e-parent\" data-id=\"be29c38\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f36ea0 elementor-widget elementor-widget-text-editor\" data-id=\"1f36ea0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"\" data-start=\"56\" data-end=\"179\">Hey there, coder! \ud83d\udc4b Have you ever felt that your <strong data-start=\"106\" data-end=\"129\">program is too slow<\/strong> because it runs tasks <strong data-start=\"152\" data-end=\"173\">one after another<\/strong>? \ud83e\udd14<\/p><p class=\"\" data-start=\"181\" data-end=\"354\">What if I told you there&#8217;s a way to <strong data-start=\"217\" data-end=\"256\">run multiple tasks at the same time<\/strong> and make your application <strong data-start=\"283\" data-end=\"297\">super fast<\/strong>? \ud83d\ude80 That\u2019s exactly what <strong data-start=\"322\" data-end=\"346\">Multithreading in C#<\/strong> does!<\/p><p class=\"\" data-start=\"356\" data-end=\"472\">Let\u2019s <strong data-start=\"362\" data-end=\"375\">dive deep<\/strong> into this exciting topic with <strong data-start=\"406\" data-end=\"467\">real-world examples, complete code, and fun explanations!<\/strong> \ud83c\udf89<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a6f7ce0 e-flex e-con-boxed e-con e-parent\" data-id=\"a6f7ce0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2459d53 elementor-widget elementor-widget-docly_alerts_box\" data-id=\"2459d53\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_alerts_box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"alert media message_alert alert-info fade show\" role=\"alert\">\r\n                <i ><\/i>\r\n                <div class=\"media-body\">\r\n                                            <h5 class=\"title\"> \ud83d\udcda What You Are Going to Learn in This Lesson?<\/h5>\r\n                                        <p class=\"alert\" data-start=\"811\" data-end=\"1064\">\u2714\ufe0f What is <strong data-start=\"822\" data-end=\"846\">Multithreading in C#<\/strong>?<br data-start=\"847\" data-end=\"850\" \/>\u2714\ufe0f Why is it important, and when should you use it?<br data-start=\"901\" data-end=\"904\" \/>\u2714\ufe0f How to create and manage multiple threads.<br data-start=\"949\" data-end=\"952\" \/>\u2714\ufe0f Understanding thread states and synchronization.<br data-start=\"1003\" data-end=\"1006\" \/>\u2714\ufe0f Real-world use cases with <strong data-start=\"1035\" data-end=\"1061\">complete, working code<\/strong>!<\/p>                                    <\/div>\r\n            <\/div>\r\n        \r\n        \r\n        \r\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bdc9c5f e-flex e-con-boxed e-con e-parent\" data-id=\"bdc9c5f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b17a524 elementor-widget elementor-widget-text-editor\" data-id=\"b17a524\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"1071\" data-end=\"1111\">\ud83d\udd25 <strong data-start=\"1076\" data-end=\"1109\">What is Multithreading in C#?<\/strong><\/h3><p class=\"\" data-start=\"1113\" data-end=\"1216\">Simply put, <strong data-start=\"1125\" data-end=\"1149\">Multithreading in C#<\/strong> allows a program to <strong data-start=\"1170\" data-end=\"1213\">execute multiple tasks at the same time<\/strong>.<\/p><p class=\"\" data-start=\"1218\" data-end=\"1340\">Imagine you\u2019re cooking \ud83c\udf73. Instead of waiting for the rice to cook before frying eggs, you <strong data-start=\"1309\" data-end=\"1337\">do both at the same time<\/strong>!<\/p><p class=\"\" data-start=\"1342\" data-end=\"1523\">That\u2019s <strong data-start=\"1349\" data-end=\"1385\">exactly how multithreading works<\/strong> in programming. <strong data-start=\"1402\" data-end=\"1465\">Multiple threads (small units of a process) run in parallel<\/strong> to make your application <strong data-start=\"1491\" data-end=\"1520\">faster and more efficient<\/strong>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c98d741 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c98d741\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-86e0567 e-flex e-con-boxed e-con e-parent\" data-id=\"86e0567\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c203e7 elementor-widget elementor-widget-heading\" data-id=\"8c203e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u26a1 Why Use Multithreading in C#?<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e061095 elementor-widget elementor-widget-text-editor\" data-id=\"e061095\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"\" data-start=\"1571\" data-end=\"1842\">\ud83d\udd39 <strong data-start=\"1574\" data-end=\"1598\">Improves performance<\/strong> by executing tasks <strong data-start=\"1618\" data-end=\"1636\">simultaneously<\/strong>.<br data-start=\"1637\" data-end=\"1640\" \/>\ud83d\udd39 <strong data-start=\"1643\" data-end=\"1657\">Saves time<\/strong> by utilizing CPU power efficiently.<br data-start=\"1693\" data-end=\"1696\" \/>\ud83d\udd39 <strong data-start=\"1699\" data-end=\"1723\">Prevents UI freezing<\/strong> in desktop apps.<br data-start=\"1740\" data-end=\"1743\" \/>\ud83d\udd39 <strong data-start=\"1746\" data-end=\"1758\">Best for<\/strong> long-running tasks like file processing, downloading, or background computations.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-842dc1e elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"842dc1e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fd2065f e-flex e-con-boxed e-con e-parent\" data-id=\"fd2065f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0f5d5ce elementor-widget elementor-widget-text-editor\" data-id=\"0f5d5ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"1849\" data-end=\"1901\">\ud83d\ude80 <strong data-start=\"1854\" data-end=\"1899\">Example 1: Creating a Simple Thread in C#<\/strong><\/h3><h4 data-start=\"1903\" data-end=\"1933\">\u00a0<\/h4><h4 data-start=\"1903\" data-end=\"1933\">\u2705 <strong data-start=\"1909\" data-end=\"1931\">Basic Code Example<\/strong><\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8298055 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"8298055\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism\" data-lng-type=\"csharp\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-csharp\">\r\n\t\t\t\t\tusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static void PrintMessage()\r\n    {\r\n        Console.WriteLine($&quot;Thread {Thread.CurrentThread.ManagedThreadId} is running.&quot;);\r\n    }\r\n\r\n    static void Main()\r\n    {\r\n        Console.WriteLine(&quot;Main thread starts.&quot;);\r\n\r\n        \/\/ Creating and starting a new thread\r\n        Thread newThread = new Thread(PrintMessage);\r\n        newThread.Start();\r\n\r\n        Console.WriteLine(&quot;Main thread ends.&quot;);\r\n    }\r\n}\r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-580d596 elementor-widget elementor-widget-text-editor\" data-id=\"580d596\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u2705 <strong data-start=\"2407\" data-end=\"2426\">Expected Output<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a10762e elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"a10762e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism-dark\" data-lng-type=\"markup\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-markup\">\r\n\t\t\t\t\tMain thread starts.  \r\nMain thread ends.  \r\nThread 4 is running.  \r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b12ae3f elementor-widget elementor-widget-text-editor\" data-id=\"b12ae3f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4 data-start=\"2503\" data-end=\"2535\">\ud83e\udd14 <strong data-start=\"2510\" data-end=\"2533\">What Just Happened?<\/strong><\/h4><p class=\"alert\" data-start=\"2537\" data-end=\"2692\">1\ufe0f\u20e3 The <strong data-start=\"2545\" data-end=\"2560\">main thread<\/strong> started.<br data-start=\"2569\" data-end=\"2572\" \/>2\ufe0f\u20e3 A <strong data-start=\"2578\" data-end=\"2592\">new thread<\/strong> was created to run <code data-start=\"2612\" data-end=\"2628\">PrintMessage()<\/code>.<br data-start=\"2629\" data-end=\"2632\" \/>3\ufe0f\u20e3 Both <strong data-start=\"2641\" data-end=\"2668\">threads run in parallel<\/strong>, so order may change.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-135f79d elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"135f79d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-db2b65a e-flex e-con-boxed e-con e-parent\" data-id=\"db2b65a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aa7cc59 elementor-widget elementor-widget-text-editor\" data-id=\"aa7cc59\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"2699\" data-end=\"2745\">\ud83c\udfaf <strong data-start=\"2704\" data-end=\"2743\">Example 2: Running Multiple Threads<\/strong><\/h3><h4 data-start=\"2747\" data-end=\"2771\">\u00a0<\/h4><h4 data-start=\"2747\" data-end=\"2771\">\u2705 <strong data-start=\"2753\" data-end=\"2769\">Code Example<\/strong><\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76d7b20 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"76d7b20\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism\" data-lng-type=\"csharp\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-csharp\">\r\n\t\t\t\t\tusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static void PrintTask(object taskId)\r\n    {\r\n        Console.WriteLine($&quot;Task {taskId} running on Thread {Thread.CurrentThread.ManagedThreadId}&quot;);\r\n        Thread.Sleep(1000); \/\/ Simulating work\r\n    }\r\n\r\n    static void Main()\r\n    {\r\n        Console.WriteLine(&quot;Main thread starts.&quot;);\r\n\r\n        for (int i = 1; i &lt;= 3; i++)\r\n        {\r\n            Thread newThread = new Thread(PrintTask);\r\n            newThread.Start(i);\r\n        }\r\n\r\n        Console.WriteLine(&quot;Main thread ends.&quot;);\r\n    }\r\n}\r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-88722aa elementor-widget elementor-widget-text-editor\" data-id=\"88722aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u2705 <strong data-start=\"2407\" data-end=\"2426\">Expected Output<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd936aa elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"bd936aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism-dark\" data-lng-type=\"markup\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-markup\">\r\n\t\t\t\t\tMain thread starts.  \r\nMain thread ends.  \r\nTask 1 running on Thread 4  \r\nTask 2 running on Thread 5  \r\nTask 3 running on Thread 6  \r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ac5b57 elementor-widget elementor-widget-text-editor\" data-id=\"1ac5b57\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\ud83c\udf89 Here, multiple threads are running in parallel, handling different tasks!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e3bcd1 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2e3bcd1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-63a7eb9 e-flex e-con-boxed e-con e-parent\" data-id=\"63a7eb9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cca829f elementor-widget elementor-widget-text-editor\" data-id=\"cca829f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"3581\" data-end=\"3638\">\ud83c\udfc6 <strong data-start=\"3586\" data-end=\"3636\">Real-World Example: Downloading Multiple Files<\/strong><\/h3><p class=\"\" data-start=\"3640\" data-end=\"3809\">Let\u2019s say you&#8217;re building a <strong data-start=\"3668\" data-end=\"3688\">download manager<\/strong> \ud83d\udce5. Instead of <strong data-start=\"3704\" data-end=\"3736\">downloading files one by one<\/strong>, <strong data-start=\"3738\" data-end=\"3806\">multithreading lets you download multiple files at the same time<\/strong>!<\/p><p class=\"\" data-start=\"3811\" data-end=\"3908\">\ud83d\udca1 <strong data-start=\"3814\" data-end=\"3906\">This is how real-world applications like browsers handle multiple downloads efficiently!<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9be8e82 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"9be8e82\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-68174bb e-flex e-con-boxed e-con e-parent\" data-id=\"68174bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5186382 elementor-widget elementor-widget-text-editor\" data-id=\"5186382\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"3915\" data-end=\"3945\">\ud83d\udd04 <strong data-start=\"3920\" data-end=\"3943\">Thread States in C#<\/strong><\/h3><p class=\"\" data-start=\"3947\" data-end=\"4002\">A <strong data-start=\"3949\" data-end=\"3959\">thread<\/strong> in C# goes through different <strong data-start=\"3989\" data-end=\"3999\">states<\/strong>:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d47d41f elementor-widget elementor-widget-text-editor\" data-id=\"d47d41f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"table_shortcode-wrap table-responsive\"><table class=\"table doc-data-table table_shortcode\"><thead class=\"table-dark\"><tr><th>State<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Unstarted<\/strong><\/td><td>Thread is created but not started yet.<\/td><\/tr><tr><td><strong>Running<\/strong><\/td><td>Thread is currently executing.<\/td><\/tr><tr><td><strong>Waiting<\/strong><\/td><td>Thread is waiting for some operation.<\/td><\/tr><tr><td><strong>Stopped<\/strong><\/td><td>Thread has finished execution.<\/td><\/tr><\/tbody><\/table><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a6d8f16 elementor-widget elementor-widget-text-editor\" data-id=\"a6d8f16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\ud83d\udca1 Understanding these states helps in debugging and better thread management!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e95593a elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"e95593a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4b8e81c e-flex e-con-boxed e-con e-parent\" data-id=\"4b8e81c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ca518d2 elementor-widget elementor-widget-text-editor\" data-id=\"ca518d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"4380\" data-end=\"4430\">\ud83d\udd25 <strong data-start=\"4385\" data-end=\"4428\">Example 3: Handling Threads with Join()<\/strong><\/h3><p class=\"\" data-start=\"4432\" data-end=\"4547\">Sometimes, you want the <strong data-start=\"4456\" data-end=\"4471\">main thread<\/strong> to <strong data-start=\"4475\" data-end=\"4483\">wait<\/strong> until another thread finishes. You can use <code data-start=\"4527\" data-end=\"4535\">Join()<\/code> for that!<\/p><h4 data-start=\"4549\" data-end=\"4573\">\u00a0<\/h4><h4 data-start=\"4549\" data-end=\"4573\">\u2705 <strong data-start=\"4555\" data-end=\"4571\">Code Example<\/strong><\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c99736 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"3c99736\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism\" data-lng-type=\"csharp\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-csharp\">\r\n\t\t\t\t\tusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static void PrintNumbers()\r\n    {\r\n        for (int i = 1; i &lt;= 5; i++)\r\n        {\r\n            Console.WriteLine($&quot;Thread {Thread.CurrentThread.ManagedThreadId}: {i}&quot;);\r\n            Thread.Sleep(500);\r\n        }\r\n    }\r\n\r\n    static void Main()\r\n    {\r\n        Console.WriteLine(&quot;Main thread starts.&quot;);\r\n\r\n        Thread newThread = new Thread(PrintNumbers);\r\n        newThread.Start();\r\n        newThread.Join(); \/\/ Main thread waits until newThread finishes\r\n\r\n        Console.WriteLine(&quot;Main thread ends.&quot;);\r\n    }\r\n}\r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-306e35c elementor-widget elementor-widget-text-editor\" data-id=\"306e35c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u2705 <strong data-start=\"5158\" data-end=\"5177\">Expected Output<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab29d31 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"ab29d31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism-dark\" data-lng-type=\"markup\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-markup\">\r\n\t\t\t\t\tMain thread starts.  \r\nThread 4: 1  \r\nThread 4: 2  \r\nThread 4: 3  \r\nThread 4: 4  \r\nThread 4: 5  \r\nMain thread ends.  \r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96b6555 elementor-widget elementor-widget-text-editor\" data-id=\"96b6555\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\ud83c\udf89 The main thread waits until <code data-start=\"5334\" data-end=\"5345\">newThread<\/code> completes execution!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bdb8abe elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"bdb8abe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f207de1 e-flex e-con-boxed e-con e-parent\" data-id=\"f207de1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c6f802 elementor-widget elementor-widget-text-editor\" data-id=\"8c6f802\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"5377\" data-end=\"5437\">\ud83d\udd04 <strong data-start=\"5382\" data-end=\"5435\">Thread Synchronization \u2013 Avoiding Race Conditions<\/strong><\/h3><ul class=\"ordered-list steps\"><li data-start=\"5439\" data-end=\"5643\">Sometimes, <strong data-start=\"5453\" data-end=\"5505\">multiple threads try to access the same resource<\/strong>, causing conflicts.<\/li><li data-start=\"5439\" data-end=\"5643\">This is called a <strong data-start=\"5548\" data-end=\"5566\">race condition<\/strong>.<\/li><li data-start=\"5439\" data-end=\"5643\">You can fix this using <strong data-start=\"5596\" data-end=\"5605\">locks<\/strong> like <code data-start=\"5611\" data-end=\"5617\">lock<\/code>, <code data-start=\"5619\" data-end=\"5628\">Monitor<\/code>, or <code data-start=\"5633\" data-end=\"5640\">Mutex<\/code>.<\/li><\/ul><h4 data-start=\"5645\" data-end=\"5694\">\u00a0<\/h4><h4 data-start=\"5645\" data-end=\"5694\">\u2705 <strong data-start=\"5651\" data-end=\"5692\">Example: Using Lock to Prevent Issues<\/strong><\/h4>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3eb7fe8 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"3eb7fe8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism\" data-lng-type=\"csharp\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-csharp\">\r\n\t\t\t\t\tusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static object locker = new object();\r\n    static int counter = 0;\r\n\r\n    static void IncrementCounter()\r\n    {\r\n        lock (locker)\r\n        {\r\n            counter++;\r\n            Console.WriteLine($&quot;Thread {Thread.CurrentThread.ManagedThreadId} incremented counter to {counter}&quot;);\r\n        }\r\n    }\r\n\r\n    static void Main()\r\n    {\r\n        Thread t1 = new Thread(IncrementCounter);\r\n        Thread t2 = new Thread(IncrementCounter);\r\n\r\n        t1.Start();\r\n        t2.Start();\r\n\r\n        t1.Join();\r\n        t2.Join();\r\n\r\n        Console.WriteLine(&quot;Final counter value: &quot; + counter);\r\n    }\r\n}\r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a6c991 elementor-widget elementor-widget-text-editor\" data-id=\"3a6c991\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u2705 <strong data-start=\"5158\" data-end=\"5177\">Expected Output<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae5a2b5 elementor-widget elementor-widget-docly_code_syntax_highlighter\" data-id=\"ae5a2b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"docly_code_syntax_highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t                    <div class=\"docly-source-code prism-dark\" data-lng-type=\"markup\">\r\n\t\t\t<pre>\r\n\t\t\t\t<code class=\"language-markup\">\r\n\t\t\t\t\tThread 4 incremented counter to 1  \r\nThread 5 incremented counter to 2  \r\nFinal counter value: 2  \r\n\t\t\t\t<\/code>\r\n\t\t\t<\/pre>\r\n            <\/div>\r\n                \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b47a904 elementor-widget elementor-widget-text-editor\" data-id=\"b47a904\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\ud83c\udf89 The <code data-start=\"6486\" data-end=\"6492\">lock<\/code> prevents both threads from modifying <code data-start=\"6530\" data-end=\"6539\">counter<\/code> at the same time!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58cb088 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"58cb088\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4d7ece7 e-flex e-con-boxed e-con e-parent\" data-id=\"4d7ece7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-13f8661 elementor-widget elementor-widget-text-editor\" data-id=\"13f8661\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-start=\"6568\" data-end=\"6592\">\ud83d\udccc <strong data-start=\"6573\" data-end=\"6590\">Key Takeaways<\/strong><\/h3><p class=\"alert\" data-start=\"6594\" data-end=\"6931\"><strong data-start=\"6597\" data-end=\"6621\">\u27a1\ufe0f Multithreading in C#<\/strong> allows multiple tasks to run <strong data-start=\"6651\" data-end=\"6669\">simultaneously<\/strong>.<br data-start=\"6670\" data-end=\"6673\" \/>\u27a1\ufe0f Improves <strong data-start=\"6685\" data-end=\"6719\">performance and responsiveness<\/strong>.<br data-start=\"6720\" data-end=\"6723\" \/>\u27a1\ufe0f Use <strong data-start=\"6730\" data-end=\"6746\">Thread class<\/strong> to create and start threads.<br data-start=\"6775\" data-end=\"6778\" \/>\u27a1\ufe0f Use <code data-start=\"6785\" data-end=\"6793\">Join()<\/code> to make a thread wait for another.<br data-start=\"6828\" data-end=\"6831\" \/>\u27a1\ufe0f Prevent <strong data-start=\"6842\" data-end=\"6861\">race conditions<\/strong> using <code data-start=\"6868\" data-end=\"6874\">lock<\/code>.<br data-start=\"6875\" data-end=\"6878\" \/><strong data-start=\"6881\" data-end=\"6928\">\u27a1\ufe0f Best for CPU-intensive and background tasks<\/strong>.<\/p><h3 data-start=\"6938\" data-end=\"6959\">\u00a0<\/h3><h3 data-start=\"6938\" data-end=\"6959\">\ud83d\ude80 <strong data-start=\"6943\" data-end=\"6957\">Next What?<\/strong><\/h3><p class=\"\" data-start=\"6961\" data-end=\"7042\">\ud83c\udf89 <strong data-start=\"6964\" data-end=\"6978\">Great job!<\/strong> Now you know how to use <strong data-start=\"7003\" data-end=\"7027\">Multithreading in C#<\/strong> effectively!<\/p><p class=\"\" data-start=\"7044\" data-end=\"7097\">But wait\u2026 \ud83e\udd14 <strong data-start=\"7057\" data-end=\"7095\">Can we make threading even easier?<\/strong><\/p><p class=\"\" data-start=\"7099\" data-end=\"7206\">\ud83d\udd25 <strong data-start=\"7102\" data-end=\"7114\">Next up:<\/strong> <strong data-start=\"7115\" data-end=\"7189\">Task Parallel Library (TPL) in Thread \u2013 Making Multithreading Simpler!<\/strong> Stay tuned! \ud83d\ude80<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Learn Multithreading in C# with examples. Discover how to run multiple tasks simultaneously, improve performance, and write efficient code.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":8039,"menu_order":186,"comment_status":"open","ping_status":"closed","template":"","doc_tag":[],"class_list":["post-9247","docs","type-docs","status-publish","hentry","no-post-thumbnail"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/docs\/9247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/comments?post=9247"}],"version-history":[{"count":4,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/docs\/9247\/revisions"}],"predecessor-version":[{"id":9325,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/docs\/9247\/revisions\/9325"}],"up":[{"embeddable":true,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/docs\/8039"}],"wp:attachment":[{"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/media?parent=9247"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.completecsharptutorial.com\/wp-json\/wp\/v2\/doc_tag?post=9247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}