1. 程式人生 > >Thread 多執行緒 等待 回撥函式 獲取返回值

Thread 多執行緒 等待 回撥函式 獲取返回值

Thread 是1.1版本時候的執行緒 它預設是前臺執行緒

前臺執行緒:程序關閉後,執行緒還會執行完

無引數多執行緒

 Console.WriteLine("主執行緒開始");
            //不帶引數的多執行緒

            ThreadStart sta = () =>
            {
                Thread.Sleep(500);
                Console.WriteLine("執行緒{0}開始執行方法",Thread.CurrentThread.ManagedThreadId);
            };
            //建立Thread

          
            //實現多執行緒
            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
               
            }
          

            Console.WriteLine("主執行緒結束");

結果


有引數 多執行緒

Console.WriteLine("主執行緒開始");
            //帶引數多執行緒

            ParameterizedThreadStart p = t => 
            {
                Thread.Sleep(1000);
                Console.WriteLine("引數為{0},當前執行緒為{1}",t,Thread.CurrentThread.ManagedThreadId);
            };

            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(p);
                t.Start(i);
            }
            Console.WriteLine("主執行緒結束");

結果


回撥函式

 public static void Do3()
        {
            //Thread實現添加回調函式
            //在我看來這就是偽回撥
            //正經的回撥函式是如果有等待執行緒的話,等待只會等著方法體完成就算等待完成,而不會等待回撥函式完成
            //這種實現方法 會把回撥函式也等待完成
            Console.WriteLine("主執行緒開始");
            ThreadStart sta = () => 
            {
                FirstFun();
                CallBackFun();
            };

            List<Thread> tList = new List<Thread>();


            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
                tList.Add(t);//加入集合中 方便等待
            }

            //等待

            foreach (Thread t in tList)
            {
                //此效果就是將執行緒加入主執行緒當中  起到等待效果
                t.Join();
            }

            Console.WriteLine("主執行緒結束");
            Console.Read();
        }

        //委託方法
        public static void FirstFun()
        {
            Thread.Sleep(1000);
            Console.WriteLine("這裡是主方法體內容,當前執行緒ID{0}",Thread.CurrentThread.ManagedThreadId);
        }
        //回撥函式
        public static void CallBackFun()
        {
            Thread.Sleep(1000);
            Console.WriteLine("這裡是回撥函式內容,當前執行緒ID{0}", Thread.CurrentThread.ManagedThreadId);
        }

呼叫Do3的結果


有回撥函式 有返回值

 public static void Do4()
        { 
            //帶引數帶返回值
            
            ParameterizedThreadStart p = t =>
            {
                string Rvalue = null;           
                Rvalue=FirstFun1((int)t);
                CallBackFun1();
                Console.WriteLine("結果{0}",Rvalue);
            };

            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(p);
                t.Start(i);
            }
        
        }

        //委託方法
        public static string FirstFun1(int i)
        {
            Thread.Sleep(1000);
            Console.WriteLine("這裡是主方法體內容,當前執行緒ID{0}", Thread.CurrentThread.ManagedThreadId);
            return i.ToString();
        }
        //回撥函式
        public static void CallBackFun1()
        {
            Thread.Sleep(1000);
            Console.WriteLine("這裡是回撥函式內容,當前執行緒ID{0}", Thread.CurrentThread.ManagedThreadId);
        }
結果



等待

ThreadStart sta = () => 
            {
                FirstFun();
                CallBackFun();
            };

            List<Thread> tList = new List<Thread>();


            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(sta);
                t.Start();
                tList.Add(t);//加入集合中 方便等待
            }

            //等待

            foreach (Thread t in tList)
            {
                //此效果就是將執行緒加入主執行緒當中  起到等待效果
                t.Join();
            }


相關推薦

Thread 執行 等待 函式 獲取返回

Thread 是1.1版本時候的執行緒 它預設是前臺執行緒 前臺執行緒:程序關閉後,執行緒還會執行完 無引數多執行緒 Console.WriteLine("主執行緒開始");

beginthreadex()函式在建立執行傳入函式時,好像只能傳入全域性函式或類的靜態成員函式,請問能不能傳入類的成員函式呢(非靜態)?

C++類成員函式直接作為執行緒回撥函式2009年06月01日 星期一 17:01我以前寫執行緒時要麼老老實實照著宣告寫,要麼使用C++類的靜態成員函式來作為回撥函式,經常會因為執行緒程式碼而破壞封裝.之前雖然知道類成員函式的展開形式,但從沒想過利用過它,昨天看深入ATL時無意中學

LINUX 執行 JNI java static

1.Linux 開啟執行緒 //渲染執行緒Rendering void* thread_rendering_process(void *lParam) {     unsigned int local_wr;     int index; &

day 34 GIL鎖,執行佇列,執行池及執行函式

一 . GIL鎖   GIL鎖是python程式碼轉直譯器程式碼的一個鎖         雖然我們加鎖的原因是因為要保護安全性從而降低了效率,但是加鎖也會出現安全性的問題!         二 . 執行緒佇列   import queue   三種佇列形式

python程式設計(執行cpython)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】     python下面的GIL決定了每次thread執行的時候不能實現完全的併發執行。所以如果多執行緒c呼叫python程式碼的時候,有很多地方需要注意一

callable介面配合ExecutorService實現執行處理資料,並接收返回(2018-08-23)

/** * @author chenzhen * Created by chenzhen on 2018/8/22. */ @Data public class QuickPullGit implements Callable<ArrayList&l

函式返回給全域性變數的賦問題

            今天遇到一個問題,在js中,回撥函式的返回值對全域性變數進行賦值,網上的解決方案主要是把非同步改為同步 async: false,好記性不如爛筆頭來記錄一下。             原始碼如下: $('#loginSubmit').click

windows核心程式設計之使用執行APC安全退出等待執行

前言 程式開發中經常遇到需要這些情況:輔助執行緒正在等待核心物件的觸發,主執行緒需要強制終止輔助執行緒。我們常常做的就是使用:TerminateThread來強制終止執行緒。這樣做當然是不太好的,強制

WIN32執行二 用WaitXXX函式等待執行結束

 等待執行緒結束的更好方法是呼叫API WaitForSigleObject和WaitForMultipleObjects。前者用於等待一個執行緒由未激發狀態變為激發狀態,後者用於等待多個執行緒中全部或多箇中的一個由未激發狀態變為激發狀態。對執行緒核心物件而言,如果執行

MUI 提問框個按鈕的函式

  var btns = new Array("按鈕1", "按鈕2"); mui.confirm("這是資訊", "這是標題", btns, function(event) { if (event.index

執行等待喚醒機制

示例程式碼取自傳智播客畢向東老師25天Java基礎教程,添加了一些觀測列印程式碼,便於理解分析。對於程序分析理解純粹個人理解,剛學Java沒多久,難免有錯,僅供參考,如果大神們發現錯誤,希望能幫忙指出,也幫我走出錯誤的理解。 先貼程式碼 class Res{ String name; Str

c/c++ 執行 等待一次性事件 packaged_task用法

多執行緒 等待一次性事件 packaged_task用法 背景:不是很明白,不知道為了解決什麼業務場景,感覺std::asynck可以優雅的搞定一切,一次等待性事件,為什麼還有個packaged_task。 用法:和std::async一樣,也能夠返回std::future,通過呼叫get_future方

c/c++ 執行 等待一次性事件 std::promise用法

多執行緒 等待一次性事件 std::promise用法 背景:不是很明白,不知道為了解決什麼業務場景,感覺std::async可以優雅的搞定一切的一次等待性事件,為什麼還有個std::promise。 用法:和std::async一樣,也能夠返回std::future,通過呼叫get_future方法。也

關於 C#呼叫C庫Dll,有函式時,只執行一次函式就直接掛掉 的解決方法

錯誤         直接當機,如下圖:           錯誤原因        回撥函式宣告原因,跟堆疊有關係  

提交訂單效能優化系列之006-普通的Thread執行改為Java8的parallelStream併發流

概括總結 Java8的parallelStream併發流能達到跟多執行緒類似的效果,但它也不是什麼善茬,為了得到跟上一版本的多執行緒類似的效果,一改再改,雖然最後改出來了,但是還是存在理解不了的地方。

Python執行中的join函式的使用與含義

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

執行池建立和執行等待

在部落格園看到一篇部落格 C# -- 使用執行緒池 ThreadPool 執行多執行緒任務 在這裡使用了執行緒池 雖然也實現了執行緒等待 但是執行緒等待實現的太死板  如果定義未知數量的執行緒池無法實現等待 ManualResetEvent數量已經定死 所

JAVA執行安全之建構函式

在一般情況下,Java的建構函式總結如下: 在建構函式一開始,this就是可用的了。 建構函式和普通函式一樣,並不是預設被synchronized 的,有可能出現同步問題。 如果建構函式中訪問靜態變數的話,必須同步這個靜態變數,否則一定會出問題。 如果只訪問成員變數的話,

java 執行等待、喚醒機制例項

例子: 1、實體類 public class Student {     String name;     int age;     boolean flag = false; // 表示沒有值 } 2、執行緒1 public class SetThread impleme

Java Thread 執行 操作執行

建立、啟動執行緒 執行緒的實現方式 執行緒的生命週期 執行緒的狀態 控制執行緒 5、執行緒的建立和啟動 A、繼承Thread類或實現Runnable介面,重寫或實現run方法,run方法代表執行緒要完成的任務 B、建立Thread子類或是Ru