TJU_SCS_C#学习笔记(7)(上)

一.课堂内容

  上回策马奔腾讲到17章,这次从第18章讲到了22章。

  18章WPF应用,这个在即将要截至的大实验中有被要求......19章Windows Form Application,20章attributes and reflection,21章线程与同步,22章stream流。不得不说内容的确非常非常的充实,我感觉我需要很长很长的时间才能够将所有的知识接触理解消化。

  故,由于时间的问题,这篇博客只能比较短暂的就其中的某些知识点进行一下基础的探究。

二.学习内容

  1.C#线程与同步。

  线程与同步一直都是各种编程语言中比较麻烦的知识点,在这里我再做一些练习和学习。

  一下是我找的一个线程同步的练习例子。

 1 using System;
 2 using System.Collections;
 3 using System.Collections.Generic;
 4 using System.Threading;
 5
 6 namespace ThreadDemo
 7 {
 8     public class ThreadDemo
 9     {
10         private Thread threadOne;
11         private Thread threadTwo;
12         private ArrayList stringList;
13         private event EventHandler OnNumberClear;//数据删除完成引发的事件
14         public static void Main()
15         {
16             ThreadDemo demo = new ThreadDemo(1000);
17             demo.Action();
18         }
19         public ThreadDemo(int number)
20         {
21             Random random = new Random(1000000);
22             stringList = new ArrayList(number);
23             for (int i = 0; i < number; i++)
24             {
25                 stringList.Add(random.Next().ToString());
26             }
27             threadOne = new Thread(new ThreadStart(Run));//两个线程共同做一件事情
28             threadTwo = new Thread(new ThreadStart(Run));//两个线程共同做一件事情
29             threadOne.Name = "线程1";
30             threadTwo.Name = "线程2";
31             OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear);
32
33         }
34         /// <summary>
35         /// 开始工作
36         /// </summary>
37         public void Action()
38         {
39             threadOne.Start();
40             threadTwo.Start();
41         }
42         /// <summary>
43         /// 共同做的工作
44         /// </summary>
45         private void Run()
46         {
47             string stringValue = null;
48             while (true)
49             {
50                 Monitor.Enter(this);//锁定,保持同步
51                 stringValue = (string)stringList[0];
52                 Console.WriteLine(Thread.CurrentThread.Name + "删除了" + stringValue);
53                 stringList.RemoveAt(0);//删除ArrayList中的元素
54                 if (stringList.Count == 0)
55                 {
56                     OnNumberClear(this, new EventArgs());//引发完成事件
57                 }
58                 Monitor.Exit(this);//取消锁定
59                 Thread.Sleep(5);
60             }
61         }
62
63         //执行完成之后,停止所有线程
64         void ThreadDemo_OnNumberClear(object sender, EventArgs e)
65         {
66             Console.WriteLine("执行完了,停止了所有线程的执行。");
67             threadTwo.Abort();
68             threadOne.Abort();
69
70         }
71     }
72 }

运行的结果如下(结果不完全,因为这个程序要跑若干秒):

  好的,让我们一起来分析一下这段代码,我认为这段代码里面包含了很多PPT内的知识点,而且还有不少PPT没有讲到的东西,只要你足够细心。

  首先我们来看ThreadDemo的构造函数,首先这个构造函数需要一个int型参数,这个参数用来定义stringList的大小,然后用随机数塞满这个list,并且声明两个线程,threadone、threadtwo,这里threadOne = new Thread(new ThreadStart(Run))中,这里的额ThreadStart正如ppt中所说的那样,使我们上个礼拜讲过的delegation,也就是委托,类似于函数的指针,这里是把Run这个函数,交给了两个线程。

  然后在Run这个函数中,我们首先看到:

这里涉及到章老师上课讲的,同步的线程对共享数据的使用。这里的Monitor是三种同步机理中的一种,另外两种分别是:

  The Interlock Class

  The C# Lock Statement

这种锁定,应该是防止同步的线程在对共享的数据同时使用时发生错乱吧。

然后我们看到Thread.sleep(5);这行代码是让线程等待5ms也就是0.005秒,ppt中讲到,sleep这个函数是被重载过的,这里用的是下图中第一个语义用法:

  关于后面的Thread.Abort(),这里用了PPT中的第三个Kill Threads的方法:

Thread.Abort()应该比Thread.Interrupt()更加强制一点吧?

  此外,这个这个和这个

好像很厉害啊,但我还没绕明白= =。

(因为助教10点看,只能先发一半 = =)

时间: 2024-07-31 16:52:24

TJU_SCS_C#学习笔记(7)(上)的相关文章

【HTML】【学习】 Canvas学习笔记【上】

Canvas是HTML新增的开发跨平台动画和游戏的标准解决方案,能够实现对图像和视频进行像素级操作. 一.在页面中添加canvas元素 就像添加一个普通div一样,canvas的添加方式为: <canvas id = "myCanvas" width = "200px" height = "100px">不支持时显示的部分</canvas> 可以用对div添加样式的方法使用CSS对Canvas添加样式 二.使用Canvas

【HTML】【学习】 2、Canvas学习笔记【上】

Canvas是HTML新增的开发跨平台动画和游戏的标准解决方案,能够实现对图像和视频进行像素级操作. 一.在页面中添加canvas元素 就像添加一个普通div一样,canvas的添加方式为: <canvas id = "myCanvas" width = "200px" height = "100px">不支持时显示的部分</canvas> 可以用对div添加样式的方法使用CSS对Canvas添加样式 二.使用Canvas

react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup.html#content 1.安装Jdk(最好默认安装路径尽量别改) http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html http://www.jb51.net/article/36811.htm(三个环境变量都配置)  Ja

TJU_SCS_C#学习笔记(4)

一.课堂内容 这周的课讲的内容比较多,有struct结构体,interface接口,以及C#数组中的一些特性,比如特殊的多维数组的声明方式,以及不规则数组还有模版,堆栈,字典等等,还有字符串string以及正则表达式的一些内容. 二.学习内容 1.首先练习了关于接口的相关内容,以前在学C++,和JAVA的时候对接口都没有好好理解,在C#的课上才明白了到底什么是接口,接口和抽象类有点类似,两者均不可实例化,均可以被继承,然而抽象类只能被单继承,而接口可以被多继承,为了防止接口污染,所以接口不可以太

TJU_SCS_C#学习笔记(9)

这次的博客本应该在上个周末就贴上来,一拖再拖,拖到现在周五,然而周末还有最后一篇博客. T T 由于上个礼拜并没有上课讲内容,看了做得比较好的同学们的成果展示,有的做游戏,有的写生活应用,有的想法奇特,有的技术超群,有的包装华丽……不得不说每个同学都非常有想法,我也感受到有个稳定的团队和明确的小组分工是多么高效的事情,然而我一个人组队在编写的过程中花费了太多的时间,如果有队友一块儿交流的话,我感觉我能做得更加好. 接下来我就讲一些我在编写代码过程中学习的知识. 1.WP的Navigation和W

TJU_SCS_C#学习笔记(5)

一.课堂内容 首先延续上节课的结尾,又讲了关于正则表达式的内容,以及c#中的exceptions相关的知识,以及delegates中文翻译为委托,以及c#的时间events,还有两个关于Windows phone app开发的视频教程.正则表达式就不用多说了,这光光拉出去都是一门值得深究的课程,关于events线程啊什么的,不管是在c++还是java中都是让我头疼的内容,关于Windows phone app的开发只能说非常有意思,但是感觉还是动手实践会学的比较快,可惜我的虚拟机就是不争气,还在

TJU_SCS_C#学习笔记(8)

一.课堂内容 接着上次的第22章stream讲到了23章Programming .NET and COM(什么鬼,表示完全不懂呀!),然后PPT上的内容就讲完了,然后章老师放了两个Binding有关的WP开发视频. 我表示我当前的实验也正在研究这个binding,DataTemplate,还有Json序列化反序列化的问题,那些视频一个个看的云里雾里,不太明白怎么用啊!!!于是这么几天我都快疯了然而实验内容还卡这关键部分还没有写出来! 二.学习内容 1.Stream 先写一点stream的东西,关

TJU_SCS_C#学习笔记(6)

一.课堂内容 感觉这节课讲了好多好多东西,至少从13章节讲到了大概17.18章的样子.13章关于LINQ语句的一些介绍,14章是关于XML的用法,15章是LINQ语句更多实际应用,16章是ADO.NET以及relational database,17章是ASP.NET,这些都是.NET一些特性,然而我并不太会,章老师也给我看了些关于ASP的视频,然而我并不会. 这篇博客主要些关于简单的LINQ以及XML两章节的一些练习. 二.学习内容 1.LINQ LINQ的全称是Language-INterg

TJU_SCS_C#学习笔记(3)

一.课堂内容 这周的课讲了chapter4&chapter5的一些内容,关于class和objects,以及inheritance和polymorphism.C#中的这些概念和C++,JAVA这些同为OOP的编程语言中的概念有些类似,但是具体上还是有着一些区别,由于之前学过C++,JAVA中的类和实力,继承与多态的概念,所以学习起来还算比较熟悉,但是精髓的想法以及细节上的处理还是需要话更多更多的时间来联系熟悉融会贯通. 二.学习内容 1.首先做了关于class中this指针的相关联系,PPT中提