程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 3個線程A B C 依次打印123123123..,

C# 3個線程A B C 依次打印123123123..,

編輯:C#入門知識

C# 3個線程A B C 依次打印123123123..,


C#經典面試題:

有3個線程,A線程打印1,B線程打印2,C線程打印3,請用程序實現依次打印123123123...

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             var mt = new MyThread();
 6             mt.Run();
 7 
 8             Console.ReadLine();
 9         }
10     }
11 
12     
13    internal class MyThread
14    {
15        private int number = 0;
16        object obj = new object();
17 
18         public void Run()
19         {
20             var ta = new Thread(PrintNumber);
21             var tb = new Thread(PrintNumber);
22             var tc = new Thread(PrintNumber);
23 
24             ta.Start("1");
25             tb.Start("2");
26             tc.Start("3");
27         }
28 
29        private void PrintNumber(object num)
30        {
31            for (int i = 0; i < 9; i++)
32            {
33                lock (obj)
34                {
35                    if (Convert.ToInt32(num) == number + 1 || Convert.ToInt32(num) == number - 2)
36                    {
37                        Console.Write(num);
38                        number = Convert.ToInt32(num);
39 
40                        // 通知正在等候的線程
41                        Monitor.PulseAll(obj);
42                    }
43                    else
44                    {
45                        // 本輪不應該打印的線程,就讓他到lock外面等候通知
46                        // 因為本次他也執行了判斷,所以循環就少了一次
47                        i--;
48                        Monitor.Wait(obj);
49                    }
50                }
51            }           
52        }
53     }

偷 @宋興柱-Sindrol 同學的代碼:C#中添加三個線程同時啟動執行某一方法,並依次調用某方法中的循環打印輸

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved