黑马程序员--多线程

来源:互联网 发布:c二维数组初始化为0 编辑:程序博客网 时间:2024/06/06 02:08

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! -----------------------

进程与线程

1.一个进程至少一个线程

2.同一个进程的多个线程之间可以“并发”执行

为什么要用多线程

1.让计算机“同时”做多件事

2.后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况

3.多线程可以让一个程序“同时”处理多个事情

4.计算机cpu大部分时间处于空闲状态,浪费了cpu资源


单线程带来的问题

我们在一个窗体中两个按钮,一个单线程执行循环,一个是多线程执行循环。当我们点击单线程按钮是,我们的窗体是不能移动的,,被卡死,;而我们点击多线程执行循环的时候,窗体是可以任意拖动的,当循环执行完,显示给用户。

/// <summary>        /// 循环        /// </summary>        void CountTime()        {            for (int i = 0; i < 999999999; i++)            {            }            MessageBox.Show("xunhuanwanbi ");        }        /// <summary>        /// 单线程问题        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnSingleThread_Click(object sender, EventArgs e)        {            CountTime() } /// <summary> /// 多线程解决 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnMulThread_Click(object sender, EventArgs e) { Thread threadFrist = new Thread(CountTime); threadFrist.Start(); }

.net中如何实现多线程
首先为线程写一个方法,方法中就是线程运行所要执行的代码。线程启动,通过委托调用该方法。
产生一个线程的4个步骤
编写产生线程所要执行的方法
引用System.Threading命名空间
实例化Thread类,并传入一个执行线程所要运行方法的委托。(线程已经产生,还未执行)
调用Thread实例的Start方法,标记该线程可以被CPu执行了,具体执行时间有cpu决定
前台线程和后台线程
前台线程:只有所有的前台线程都关闭才能完成程序关闭

后台线程:只要所有的前台线程结束,后台线程自动结束

方法重入

当我们有两个线程时,第一个线程还未执行完,cpu就是终止当前线程,启动另一个线程,交给另一个线程执行。这就是线程重入问题,。

每个线程都是单独执行方法,哪怕调用同一个方法。

执行带参数的方法


/// <summary>        /// 要执行的带参数的方法        /// </summary>        /// <param name="name"></param>        void ShowTxt(object name)        {            if (name == "")            {                MessageBox.Show("null");            }            else            {                MessageBox.Show("name=" + name);            }        }        /// <summary>        /// 线程执行带参数的方法        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnMulThreadWithPara_Click(object sender, EventArgs e)        {            Thread ts = new Thread(ShowTxt);            ts.IsBackground = true;            ts.Start(textBox2.Text);        }




---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net

原创粉丝点击