成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實例講解.NET多線程執行函數

開發 后端
這篇博文主要是用最簡單的例子,總結下多線程調用函數的相關注意點,重點偏向應用和記憶。

這里為什么會出現多線程?原因是DebugLZQ在寫一個LINQ綜合Demo的時候遇到了多線程,便停下手來整理一下。關于多線程的文章,園子里很多很多,因此關于多線程理論性的東西,LZ就不去多說了,這篇博文主要是用最簡單的例子,總結下多線程調用函數的相關注意點,重點偏向應用和記憶。

1.多線程調用無參函數                                                                                   

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading; 
  6.  
  7. namespace 多線程 
  8.     class Program 
  9.     { 
  10.         static void Main(string[] args) 
  11.         { 
  12.             Console.WriteLine("主線程開始"); 
  13.             Thread t = new Thread(new ThreadStart(ShowTime));//注意ThreadStart委托的定義形式 
  14.             t.Start();//線程開始,控制權返回Main線程 
  15.             Console.WriteLine("主線程繼續執行"); 
  16.             //while (t.IsAlive == true) ; 
  17.             Thread.Sleep(1000); 
  18.             t.Abort(); 
  19.             t.Join();//阻塞Main線程,直到t終止 
  20.             Console.WriteLine("--------------"); 
  21.             Console.ReadKey(); 
  22.         } 
  23.         static void ShowTime() 
  24.         { 
  25.             while (true
  26.             { 
  27.                 Console.WriteLine(DateTime.Now.ToString());                
  28.             } 
  29.         } 
  30.     } 

注意ThreadStart委托的定義如下:

可見其對傳遞進來的函數要求是:返回值void,無參數。

2.多線程調用帶參函數(兩種方法)     

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading; 
  6.  
  7. namespace 多線程2_帶參數 
  8.     class Program 
  9.     { 
  10.         static void Main(string[] args) 
  11.         { 
  12.             Console.WriteLine("Main線程開始"); 
  13.             Thread t = new Thread(new ParameterizedThreadStart(DoSomething));//注意ParameterizedThreadStart委托的定義形式 
  14.             t.Start(new string[]{"Hello","World"}); 
  15.             Console.WriteLine("Main線程繼續執行"); 
  16.  
  17.             Thread.Sleep(1000); 
  18.             t.Abort(); 
  19.             t.Join();//阻塞Main線程,直到t終止 
  20.             Console.ReadKey(); 
  21.         } 
  22.         static void DoSomething(object  s) 
  23.         { 
  24.             string[] strs = s as string[]; 
  25.             while (true
  26.             { 
  27.                 Console.WriteLine("{0}--{1}",strs[0],strs[1]); 
  28.             } 
  29.         } 
  30.     } 
注意ParameterizedThreadStart委托的定義如下:

可見其對傳入函數的要求是:返回值void,參數個數1,參數類型object

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading; 
  6.  
  7. namespace 多線程2_帶參數2 
  8. {    
  9.     class Program 
  10.     { 
  11.         static void Main(string[] args) 
  12.         { 
  13.             Guest guest = new Guest()  
  14.             { 
  15.              Name="Hello", Age=99 
  16.             }; 
  17.             Thread t = new Thread(new ThreadStart(guest.DoSomething));//注意ThreadStart委托的定義形式 
  18.             t.Start(); 
  19.  
  20.             Thread.Sleep(1000); 
  21.             t.Abort(); 
  22.             t.Join();//阻塞Main線程,直到t終止 
  23.             Console.ReadKey(); 
  24.         } 
  25.     } 
  26.     // 
  27.     class Guest 
  28.     { 
  29.         public string Name { getset; } 
  30.         public int Age { getset; } 
  31.  
  32.         public void DoSomething() 
  33.         { 
  34.             while (true
  35.             { 
  36.                 Console.WriteLine("{0}--{1}", Name, Age); 
  37.             } 
  38.         } 
  39.     } 
這個還是使用ThreadStart委托,對方法進行了一個封裝。

兩種方法,可隨意選擇,***種貌似簡潔一點。

3.線程同步

線程同步的方法有很多很多種volatile、Lock、InterLock、Monitor、Mutex、ReadWriteLock...

這里用lock說明問題:在哪里同步,用什么同步,同步誰?

首先感受下不同步會出現的問題:

代碼就是下面的代碼去掉lock塊。

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading; 
  6.  
  7. namespace 多線程3_同步2 
  8.     class Program 
  9.     { 
  10.         static object obj = new object();//同步用 
  11.  
  12.         static int balance = 500; 
  13.  
  14.         static void Main(string[] args) 
  15.         { 
  16.             Thread t1 = new Thread(new ThreadStart(Credit)); 
  17.             t1.Start(); 
  18.  
  19.             Thread t2 = new Thread(new ThreadStart(Debit)); 
  20.             t2.Start(); 
  21.  
  22.             Console.ReadKey(); 
  23.         } 
  24.  
  25.         static void Credit() 
  26.         { 
  27.             for (int i = 0; i < 15; i++) 
  28.             { 
  29.                 lock (obj) 
  30.                 { 
  31.                     balance += 100; 
  32.                     Console.WriteLine("After crediting,balance is {0}", balance); 
  33.                 } 
  34.             } 
  35.         } 
  36.         static void Debit() 
  37.         { 
  38.             for (int i = 0; i < 15; i++) 
  39.             { 
  40.                 lock (obj) 
  41.                 { 
  42.                     balance -= 100; 
  43.                     Console.WriteLine("After debiting,balance is {0}", balance); 
  44.                 } 
  45.             } 
  46.         } 
  47.     } 
小結:多線程調用函數就是這樣。在Winform中,控件綁定到特定的線程,從另一個線程更新控件,不應該直接調用該控件的成員,這個非常有用。

原文鏈接:http://www.cnblogs.com/DebugLZQ/archive/2012/11/11/2765487.html

責任編輯:彭凡 來源: 博客園
相關推薦

2010-03-15 19:37:00

Java多線程同步

2009-10-27 12:20:06

VB.NET多線程應用

2009-02-01 09:06:15

.NET多線程.NET線程管理

2010-04-27 17:23:34

AIX系統

2009-10-09 17:01:32

VB.NET多線程

2010-03-03 09:12:25

.NET字符串拘留池

2009-11-23 14:44:22

PHP 5.0構造函數

2011-12-15 11:03:21

JavaNIO

2011-06-30 17:31:32

Qt 多線程 信號

2009-12-14 14:32:50

Ruby線程局部域變量

2009-07-21 17:09:47

ASP.NET多線程

2009-07-28 11:34:02

ASP.NET架設

2009-10-12 16:08:14

VB.NET訪問注冊表

2010-01-14 16:54:56

VB.NET Impo

2009-07-30 13:57:39

ASP.NET水晶報表ASP.NET

2017-03-08 16:25:54

Linux多線程函數

2009-10-22 11:25:08

CLR函數壓縮

2009-07-28 15:30:34

ASP.NET多線程

2010-01-18 18:06:07

VB.NET多線程

2010-04-14 09:20:26

.NET多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日本在线观看 | 超碰人人91 | 国产一区二 | 日韩av网址在线观看 | 欧美色影院 | 中文字幕 在线观看 | 国产精品二区三区 | 日韩午夜精品 | 国产一区二区久久久 | 亚洲日韩中文字幕一区 | av激情在线 | 在线日韩中文字幕 | 另类a v| 国产99久久精品一区二区永久免费 | 精品av天堂毛片久久久借种 | 国产精品成人一区二区三区 | 欧美激情精品久久久久 | 国产在线观看不卡一区二区三区 | 在线成人精品视频 | 亚洲福利一区 | 天堂资源最新在线 | 日韩欧美在线一区 | 天天影视亚洲综合网 | 操操日| 国产91在线视频 | 81精品国产乱码久久久久久 | 91视频免费黄 | 一区二区三区在线观看视频 | 欧美日韩一本 | 久久国产精品一区二区三区 | 激情婷婷| 91麻豆精品国产91久久久更新资源速度超快 | 国产99热精品 | 亚洲综合无码一区二区 | 中文字幕高清免费日韩视频在线 | 亚洲精品一区二区三区在线 | 欧美日韩黄 | 精品国产欧美在线 | 香蕉久久av | 日韩一区二区久久 | 精品福利在线 |