黑马程序员-我的入学笔记8-多线程的初次了解
2013-09-27 10:04
465 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a
href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
今天再次看了关于多线程的视频,我发现同一段视频,再看第二遍,第三遍的时候,你的注意力在不同的点,这时才真正的理解了老师要讲解的内容.也许这就是读书百遍而意自现吧.通过老师视频中的画图和列子,我基本能够理解多线程的作用是怎么样的,但具体计算机内部怎么实现的还不知道,这里占时不去深究.在程序中线程怎么定义的,怎么使用的基本了解了,并自己写出来了代码实现了.通过这些天的学习,我发现我们的注意力要集中在重点上,要循序渐进的学习,不能广撒网,结果什么都理解的不透彻,程序内部的具体实现,等以后有了一定的基础,理解起来更容易.下面是我自己敲下视频中的代码
学习是一个循序渐进的过程,也是在不断的自我调整,学习更有效的学习方法的过程,还有不断的合理分配利用好时间,和加强自制力的过程,在这个过程中不断的努力.
href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
今天再次看了关于多线程的视频,我发现同一段视频,再看第二遍,第三遍的时候,你的注意力在不同的点,这时才真正的理解了老师要讲解的内容.也许这就是读书百遍而意自现吧.通过老师视频中的画图和列子,我基本能够理解多线程的作用是怎么样的,但具体计算机内部怎么实现的还不知道,这里占时不去深究.在程序中线程怎么定义的,怎么使用的基本了解了,并自己写出来了代码实现了.通过这些天的学习,我发现我们的注意力要集中在重点上,要循序渐进的学习,不能广撒网,结果什么都理解的不透彻,程序内部的具体实现,等以后有了一定的基础,理解起来更容易.下面是我自己敲下视频中的代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;//这里必须要引用线程的命名空间 namespace 有关多线程 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //这里屏蔽了对错误线程调用的警告 TextBox.CheckForIllegalCrossThreadCalls = false; } //单线程的缺点 private void btnSingleThread_Click(object sender, EventArgs e) { //for (int i = 0; i < 999999999; i++) //{ //} //MessageBox.Show("循环完毕~~~~~~"); CountTime(); } /// <summary> /// 循环计数封装成方法,便于调用 /// </summary> void CountTime()//没有返回值和参数 { //获取循环刚开始的时间 DateTime beginTime = DateTime.Now; for (int i = 0; i < 999999999; i++) { } //通过方法当前时间减去刚开始的时间,赋给ts TimeSpan ts = beginTime.Subtract(DateTime.Now); //再截取ts的秒表,得到所用的秒数 MessageBox.Show("循环完毕~~~~~~"+ts.TotalMilliseconds); } //使用多线程解决UI卡死问题 private void btnDoubleThread_Click(object sender, EventArgs e) { //完整的写法,先创建一个委托,再将委托传给线程调用 //ThreadStart ts=new ThreadStart(CountTime); //Thread threadFirst = new Thread(ts); //新建一个线程,传入线程的参数,一个没有返回值和参数的方法 Thread threadFirst = new Thread(CountTime); //调用线程的属性,设置成后台线程,当前台所有线程结束时,后台线程直接退出 threadFirst.IsBackground = true; //调用线程的Start方法,启动线程 threadFirst.Start(); } /// <summary> /// 改变文本框的值的方法 /// </summary> void ChangeTxt() { for (int i = 0; i < 1000; i++) { int a = Convert.ToInt32(txtNum1.Text); //控制台写出当前运行的线程,和a的值的变化 Console.WriteLine(Thread.CurrentThread.Name + ",a=" + a); a++; txtNum1.Text = a.ToString(); } } //两个线程同时调用一个方法,导致的线程重入的问题 private void btDoubleRepeat_Click(object sender, EventArgs e) { Thread thread1 = new Thread(ChangeTxt); //线程的姓名属性 thread1.Name = "t1"; thread1.IsBackground = true; thread1.Start(); Thread thread2 = new Thread(ChangeTxt); thread2.Name = "t2"; thread2.IsBackground = true; thread2.Start(); } /// <summary> /// 带参数的方法 /// </summary> /// <param name="name"></param> void ShowTextNum2(object name) { MessageBox.Show(name.ToString()); } //执行带参数方法的线程 private void button1_Click(object sender, EventArgs e) { //完整的写法,new了带参数的委托 //ParameterizedThreadStart pts = new ParameterizedThreadStart(ShowTextNum2); //Thread thread = new Thread(pts); Thread thread = new Thread(ShowTextNum2); thread.IsBackground = true; //执行带参数的Start方法 thread.Start(txtNum2.Text); } /// <summary> /// 带多个参数的方法 /// </summary> /// <param name="name"></param> void ShowTextNum3(object li) { List<string> listName = li as List<string>; if (li != null) { foreach (string s in listName) { MessageBox.Show(s); } } } //调用带多个参数方法的线程 private void button3_Click(object sender, EventArgs e) { Thread tread3 = new Thread(ShowTextNum3); tread3.IsBackground = true; //这里的用集合直接将多个参数赋给方法 tread3.Start(new List<string>(){"jim","lucy","tom"}); } //模拟线程的定义 public class MyThread { ThreadStart ts; ParameterizedThreadStart pts; public MyThread(ThreadStart ts) { this.ts = ts; } public MyThread(ParameterizedThreadStart pts) { this.pts = pts; } public void Start(object o) { if (o == null) { Thread tts = new Thread(ts); tts.Start(); } else { Thread ptts = new Thread(pts); ptts.Start(o); } } } //用了自己定义的线程 private void button2_Click(object sender, EventArgs e) { MyThread tts = new MyThread(ChangeTxt); tts.Start(null); } } }
学习是一个循序渐进的过程,也是在不断的自我调整,学习更有效的学习方法的过程,还有不断的合理分配利用好时间,和加强自制力的过程,在这个过程中不断的努力.
相关文章推荐
- 黑马程序员-我的入学笔记10-List类的初次了解
- 黑马程序员-我的入学笔记7-HTML的初次了解
- 黑马程序员-我的入学笔记6-winform的初次了解
- 黑马程序员-------Java笔记--------多线程基础练习2题
- 黑马程序员--------Java多线程讲解笔记
- 黑马程序员——JAVA学习笔记——多线程
- 黑马程序员15——多线程笔记
- [黑马程序员]多线程_学习笔记9
- 黑马程序员-02-多线程笔记
- 黑马程序员 - 学习笔记8 接口的初步了解
- 黑马程序员_多线程的线程间通信学习笔记
- 黑马程序员-我的入学笔记1-关于C#.net基础
- 黑马程序员_笔记_多线程(创建线程-继承Thread类)
- 黑马程序员_学习笔记第11天——多线程1
- 黑马程序员java笔记之二-----多线程
- 黑马程序员——学习笔记——多线程
- 多线程笔记--先了解工具
- 黑马程序员自学笔记 Java基础<五>---> 多线程
- 黑马程序员——Java练习笔记——多线程
- 黑马程序员_java多线程学习笔记