1. 程式人生 > >C#多執行緒程式設計筆記(1.2)-檢測執行緒狀態State

C#多執行緒程式設計筆記(1.2)-檢測執行緒狀態State

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^

using System;
using System.Threading;

namespace 檢測執行緒狀態
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting program...");
            Thread t = new Thread(PrintNumbersWithStatus);
            Thread t2 = new Thread(DoNothing);
            Console.WriteLine(t.ThreadState.ToString());
            t2.Start();
            t.Start();
            for (int i = 1; i < 30; i++)
            {
                Console.WriteLine(t.ThreadState.ToString());
            }
            Thread.Sleep(TimeSpan.FromSeconds(6));
            t.Abort();
            Console.WriteLine("A thread has been aborted");
            Console.WriteLine(t.ThreadState.ToString());
            Console.WriteLine(t2.ThreadState.ToString());
            Console.ReadKey();
        }

        static void DoNothing()
        {
            Thread.Sleep(TimeSpan.FromSeconds(2));//阻塞2秒
        }

        static void PrintNumbersWithStatus()
        {
            Console.WriteLine("Starting...");
            //顯示當前執行緒的狀態
            Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(2));
                Console.WriteLine(i);
            }
        }
    }
}

執行緒狀態位於Thread物件的ThreadState屬性中,是一個列舉物件。剛開始的執行緒狀態為ThreadState.Unstarted。然後我們啟動執行緒,並估計在一個週期為30次迭代的區間中,執行緒狀態會從ThreadState.Running變為ThreadState.WaitSleepJoin。

終止第一個執行緒後,會看到該執行緒的狀態為ThreadState.Aborted,在程式的最後t2執行緒成功完成且狀態為ThreadState.Stopped。這些都是執行緒狀態的一些例項,可以讓大家更清楚的認識到執行緒狀態具體的變化。不過需要注意的是,不要在程式中使用執行緒終止,會造成無法預計的錯誤,這裡使用只是為了展示相應的執行緒狀態!

相關推薦

C#執行程式設計筆記(1.2)-檢測執行狀態State

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace 檢測執行緒狀態 { class Program {

C#執行程式設計筆記(5.2)-在lambda表示式中使用await操作符

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading.Tasks; using System.Threading; namespace 在Lam

C# 線程學習筆記 - 1

agg 部分 console csharp 回調方法 提高 作者 lse 超時 本文主要針對 GKarch 相關文章留作筆記,僅在原文基礎上記錄了自己的理解與摘抄部分片段。 遵循原作者的 CC 3.0 協議。 如果想要了解更加詳細的文章信息內容,請訪問下列地址進行學習。

C#執行程式設計筆記(2.1)-使用Mutex類

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^Mutex是一種原始的同步方法,其只對一個執行緒授予對共享資源的獨佔訪問using System; using System.Threading; namespac

C#執行程式設計筆記(2.5)-使用CountDownEvent類

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace CountDownEvent_Test { class Pr

C#執行程式設計筆記(2.7)-使用ReaderWriterLockSlim類

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Collections.Generic; using System.Threading; namespace

c#執行程式設計筆記2

第三部分執行緒的同步 同步的意思是在多執行緒程式中,為了使兩個或多個執行緒之間,對分配臨界資源的分配問題,要如何分配才能使臨界資源在為某一執行緒使用的時候,其它執行緒不能再使用,這樣可以有效地避免死鎖與髒資料。髒資料是指兩個執行緒同時使用某一資料,造成這個資料出現不可預知的狀

C#執行程式設計筆記(2.6)-使用Barrier類

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace Barrier_Test { class Program

C#執行程式設計筆記(2.8)-使用SpinWait類

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace SpinWait_Test { class Program

Java執行程式設計筆記2:synchronized同步方法

非執行緒安全會在多個執行緒對同一個物件中的例項變數進行併發訪問時發生,產生的結果就是髒讀,也就是取到的資料是被更改過的。執行緒安全就是獲得的例項變數的值是經過同步處理的。 方法內的變數是執行緒安全的 方法內的變數是執行緒安全的。非執行緒安全的問題存在於例項變數中,如果是方法內部的私有變數,不存在非執行緒安

C++執行筆記1

來源:C++ 11 多執行緒 課程介紹 併發:同一時間間隔 並行:同一時刻 多程序:程序間通訊:檔案、管道、訊息佇列 多程序:共享記憶體 C++多執行緒庫<thread> 建立一個執行緒 thread t(callable); 其中callable為可呼叫物件

C++執行程式設計學習(1)】-CPU個數、CPU核心數、CPU執行

轉自:CPU個數、CPU核心數、CPU執行緒數(by kimsimple)   CPU個數即CPU晶片個數。 CPU核心數是指物理上,也就是硬體上存在著幾個核心。比如,雙核就是包括2個相對獨立的CPU核心單元組,四核就包含4個相對獨立的CPU核心單元組。 CPU執行緒數是一

C#執行程式設計筆記(5.5)-處理非同步操作中的異常

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^本篇將描述在C#中使用非同步函式時如何處理異常。我們將學習對多個並行的非同步操作使用await時如何聚合異常。using System; using System.T

C#執行程式設計筆記(4.4)-處理Task任務中的異常

近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^ using System; using System.Threading.Tasks; using System.Threading; namespace 處理任

c#執行程式設計筆記4

a)使用Monitor類 Monitor類提供了鎖定部分程式碼的簡單機制,只要把受保護的程式碼包裝在Monitor.Enter與Monitor.Exit程式碼塊中就行了。Monitor.Enter方法與Monitor.Exit方法都有一個引數。 Monitor.Enter(o

C++11併發/執行程式設計系列(2

std::thread詳解 std::thread在標頭檔案<thread>中宣告,因此使用 std::thread 時需要包含 <thread>標頭檔案。 default(1) thread() noexcept;

Java執行程式設計核心(1)

Java多執行緒程式設計核心(1) 停止執行緒 本節主要討論如何更好停止一個執行緒。停止執行緒意味著線上程處理完成任務之前放棄當前操作。 1.停不了的執行緒 可能大多數同學會使用interrupt()來停止執行緒,但是此方法並不能真的停止執行緒,僅僅是在當年執行緒中打了一個停

Java執行程式設計筆記10:單例模式

立即載入:“餓漢模式” 立即載入就是指使用類的時候已經將物件建立完畢,常見的實現方法就是直接new例項化。也就是在呼叫方法前,例項就被建立了。示例程式碼如下所示: class MyObject { private static MyObject myObject=new MyObject();

Java執行程式設計-(1)-執行安全和鎖Synchronized概念

一、程序與執行緒的概念 (1)在傳統的作業系統中,程式並不能獨立執行,作為資源分配和獨立執行的基本單位都是程序。 在未配置 OS 的系統中,程式的執行方式

深入C#並行程式設計1) -- 瞭解執行

  一、作業系統用程序(Processe)分隔正在執行的程式,用執行緒(Thread)作為作業系統分配處理器時間的基本單元,程序上下文中可以執行多個執行緒,程序的所有執行緒共享其虛擬地址空間,所有執行緒均可執行程式程式碼中的任意部分,包括其他執行緒正在執行的程式碼;   1.預設情況下,.NET程式只啟動單