黑马程序员-我的入学笔记8-多线程的初次了解
来源:互联网 发布:两个移动硬盘对拷数据 编辑:程序博客网 时间:2024/05/16 18:46
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<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); } }}学习是一个循序渐进的过程,也是在不断的自我调整,学习更有效的学习方法的过程,还有不断的合理分配利用好时间,和加强自制力的过程,在这个过程中不断的努力.
- 黑马程序员-我的入学笔记8-多线程的初次了解
- 黑马程序员-我的入学笔记6-winform的初次了解
- 黑马程序员-我的入学笔记7-HTML的初次了解
- 黑马程序员-我的入学笔记10-List类的初次了解
- 黑马程序员-我的入学笔记2-关于类
- 黑马程序员-我的入学笔记4-类的继承和多态
- 黑马程序员-我的入学笔记5-类的补充(抽象方法和接口)
- 黑马程序员-我的入学笔记11-基础题的扩展
- 黑马程序员-我的入学笔记1-关于C#.net基础
- 黑马程序员-我的入学笔记3-飞行棋小程序
- 黑马程序员-我的入学笔记9-关于socket简易聊天室
- 黑马程序员入学前的准备
- 黑马程序员------入学资格-----枚举的使用
- 【黑马程序员】入学面试前的练习
- 黑马程序员入学篇——(6)java的多线程
- 黑马程序员入学篇——(7)java的多线程(续写)
- 黑马程序员—入学黑马前的内心挣扎。。。。。
- 黑马程序员 - 学习笔记8 接口的初步了解
- JAVA操作properties文件
- ramdisk/ramfs/tmpfs/initrd/initramfs/rootfs/cpio
- windows图形编程 学习杂谈 之 高效率窗口背景
- memcached总结
- thinkphp中Cookie::set()和cookie()方法的区别
- 黑马程序员-我的入学笔记8-多线程的初次了解
- poj 1185 炮兵阵地
- C++必须使用初始化列表的一种情况
- 探讨编程时字符集的问题
- 【笔记】信号量集
- C++开发之界面库资源推荐篇
- _ClassFactoryCreatorClass
- 关于EAS 套打配置审批结果信息的相关思路
- delphi 6函数