(一)線程基礎

来源:https://www.cnblogs.com/ttmdl/archive/2018/02/24/8464407.html
-Advertisement-
Play Games

認識線程 因為新啟動的線程里會休息一下,所以肯定是主線程的方法先執行, 如果想讓新啟動的線程執行完再去執行主線,也就是讓主線程等待,可以用 join 有時候覺得新啟動的線程有點不聽話,乾脆幹掉吧,讓它活一會已經夠意思了,可以用Abort,但是這個容易出問題,不建議使用。 線程是有前後之分的,預設顯示 ...


 

認識線程

public static void Print()
        {
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(1000);
                Console.WriteLine(i);
            }
        }
        public static void Print1()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("i am first thread " + i);
            }
        }
 Console.WriteLine("Starting------------");

            Thread t = new Thread(Print);
            t.Start();
           
            Print1();

            Console.ReadKey();

因為新啟動的線程里會休息一下,所以肯定是主線程的方法先執行,

 

如果想讓新啟動的線程執行完再去執行主線,也就是讓主線程等待,可以用 join

 Console.WriteLine("Starting------------");

            Thread t = new Thread(Print);
            t.Start();
            t.Join();  //阻塞後面的線程,一直等到它完成。
            Print1();

            Console.ReadKey();

 

有時候覺得新啟動的線程有點不聽話,乾脆幹掉吧,讓它活一會已經夠意思了,可以用Abort,但是這個容易出問題,不建議使用。

  Console.WriteLine("Starting------------");

            Thread t = new Thread(Print);
            t.Start();
            Thread.Sleep(5000);
            t.Abort();//幹掉線程,容易引發異常,不建議使用
            Print1();

            Console.ReadKey();

 

線程是有前後之分的,預設顯示創建的線程都是前臺線程,而進程會等待所有的前臺線程結束後自動關閉程式,不管後臺線程的死活,不過如果程式定義了一個永遠不會執行完的線程那麼就可以等待後臺線程執行完了,比如 Console.ReadKey(),是吧,哈哈

 Console.WriteLine("Starting------------");

            Thread t = new Thread(Print);
            t.Start();
            t.IsBackground = true;
            Print1();

            //Console.ReadKey();

 

把新啟動的線程設置為後臺線程之後,如果最後一下不註釋的話,那麼前後線程都會執行完,如果註釋的話,那麼主線程執行完直接就結束程式了。

 

 

如果調用的方法里想傳遞參數呢,不用著急有2中方法。

1、

 public static void Print3(string name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(name + "========================" + i);
            }
        }
 Console.WriteLine("Starting------------");
            Thread t = new Thread(() => { Print3("i am"); });
            t.Start();            
            Console.ReadKey();

 

2、

 public static void Print4(object name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(name + "========================" + i);
            }
        }
 Console.WriteLine("Starting------------");
            Thread t = new Thread(new ParameterizedThreadStart(Print4));
            t.Start("i am ");            
            Console.ReadKey();

註意2中帶參數的方式,第二種比較特殊,要求方法參數必須是object的,要註意。

 

異常處理的話,一般是線上程里進行try-catch,如果是線上程外面 try-catch的話,將失效,即 報錯。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • final關鍵字的含義 在`Java final`,你將不能改變這個引用了,編譯器會檢查代碼,如果你試圖將變數再次初始化的話,編譯器會報編譯錯誤。 final變數 凡是對成員變數或者本地變數(在方法中的或者代碼塊中的變數稱為本地變數)聲明為 的都叫作 變數。 變數經常和 關鍵字一起使用,作為常量。 ...
  • 1. Scrapy框架 Scrapy是python下實現爬蟲功能的框架,能夠將數據解析、數據處理、數據存儲合為一體功能的爬蟲框架。 2. Scrapy安裝 1. 安裝依賴包 2. 安裝scrapy 註意事項:scrapy和twisted存在相容性問題,如果安裝twisted版本過高,運行scrapy ...
  • RuntimeException也可以給throws 非運行異常(編譯異常)throw 一定需要throws 異常,以待捕獲或繼續拋出,是因為運行時異常一旦發生,程式會停止 運行時異常 jvm會自動補throws,所以不寫也不會出錯,寫上也行 子父類異常問題 子類異常不能大於父類異常 父類無異常,子 ...
  • Spring提供了一套管理項目中的事務的機制 以前寫過一篇簡單的介紹事務的隨筆:http://www.cnblogs.com/xuyiqing/p/8430214.html 還有一篇Hibernate的事務管理:http://www.cnblogs.com/xuyiqing/p/8449167.ht ...
  • 一、高效定位代碼 1、跳轉 1、項目之間的跳轉 Next Project Window 快捷鍵 Ctrl + Alt + 左方括弧。 Previous Project Window 快捷鍵 Ctrl + Alt + 左方括弧。 2、文件之間的跳轉 1、Find Action 快捷鍵 Ctrl + S ...
  • .NET Core UI框架Avalonia,Avalonia是一個基於WPF XAML的跨平臺UI框架,並支持多種操作系統:Windows(.NET Framework,.NET Core),Linux(GTK),MacOS,Android和iOS。 Avalonia目前處於測試階段。 GitHu ...
  • 在之前寫的一篇文章(XAML: 自定義控制項中事件處理的最佳實踐)中,我們曾提到了在 .NET 中如果事件沒有反註冊,將會引起記憶體泄露。這主要是因為當事件源會對事件監聽者產生一個強引用,導致事件監聽者無法被垃圾回收。 在這篇文章中,我們首先將進一步說明記憶體泄露的問題;然後,我們會重點介紹 .NET 中 ...
  • 轉自:http://www.cnblogs.com/TankXiao/p/3164995.html 整理了一些VS的快捷鍵 格式化整個文檔:(Ctrl + K, Ctrl + D)智能感知:(Ctrl + J)查看函數參數: (Ctrl+K, Ctrl+P)插入代碼段:(Ctrl+K, Ctrl+S ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...