黑马程序员—学习笔记之C#多线程

本文详细介绍了Windows Phone 7手机开发过程中的进程与线程概念,包括进程、线程、多线程原理及.NET环境中实现多线程的方法。文章还涉及了前台线程和后台线程的概念,以及Thread类的使用方法,如创建线程、执行方法、Start()和Abort()方法等。
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看: http://net.itheima.com/

一、进程与线程

(一)进程

简单的说,一个程序就是一个进程

(二)线程

线程是程序中的一个执行流。每个线程都有自己专有的寄存器(储存栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数

(三)多线程

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务

1.CPU通过线程执行代码,如同商店通过工人来做店里要做的事情(如打扫、卖东西)

2.同一个进程中的多个线程可以“并发”执行。所谓“并发”执行,并不是真正的同时执行

3.一个CPU在同一时刻只能执行一个线程。如果只有一个CPU,则CPU在多个线程之间来回切换

4.线程中包含寄存器,存储CPU执行到这个线程的哪一步。这样CPU在多个线程之间来回切换的时候就知道该从哪里继续

(四)进程与线程之间的关系

一个进程至少包括一个线程,即默认线程(主线程、UI线程)

(五)net中如何实现多线程

1.线程就是一个工人(帮工)。所以要产生一个线程,就必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来坐一件事情)

2.线程启动时,通过委托调用该方法。线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法

3.线程运行完所要执行的代码后自动停掉

(六)前台线程和后台线程

1.前台线程:只有所有的前台线程都关闭才能完成程序关闭

2.后台线程:只要所有的前台线程都关闭则后台线程自动结束。

threadFirst.Background = true;                    //把线程设置为后台线程

二、Thread类

Thread 实例名 = new Thread(方法名);

执行带参数的方法和带多个参数的方法,则将方法的传入参数类型设为object

(一)执行带参数的方法

        void ShowName(object name)
        {
            MessageBox.Show(name.ToString());
        }
        private void btnMultipleThreadWithParameter_Click(object sender, EventArgs e)
        {
            Thread threadShowName = new Thread(ShowName);
            threadShowName.IsBackground = true;
            threadShowName.Start("刘德华");

        }

(二)执行带多个参数的方法

        void ShowManyName(object names)
        {
            List<string> nameList = names as List<string>;
            foreach(string name in nameList)
            {
                MessageBox.Show(name);
            }
        }
        private void btnMultipleThreadWithManyParameters_Click(object sender, EventArgs e)
        {
            Thread threadShowName = new Thread(ShowManyName);
            threadShowName.IsBackground = true;
            threadShowName.Start(new List<string>() { "刘德华","周杰伦","陈奕迅"});
        }

(三)Start()方法

并不表示线程开始执行,而是表示该线程可以被CPU执行

(四)Abort()方法

在调用此方法的线程上引发ThreadAbortException,以终止线程。

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看: http://net.itheima.com/
### 黑马程序员多线程学习笔记与资料 在Java中,多线程是实现并发编程的重要工具。以下是一些关于黑马程序员多线程学习笔记和相关资料的内容总结[^1]。 #### 线程池的工作机制 线程池是一种用于管理和复用线程的机制,能够有效减少线程创建和销毁的开销,提高系统性能。当通过`submit`方法向线程池提交任务时,其工作流程如下: - 客户端每次提交一个任务,线程池会在核心线程池中创建一个工作线程来执行这个任务。 - 如果核心线程池中的线程已满,则尝试将任务存储到工作队列中。 - 如果工作队列也满了,线程池会再次在非核心线程池区域创建新线程来执行任务,直到当前线程池总线程数量达到最大值。 - 当线程池中的线程数量超过最大值时,多余的任务将按照指定的拒绝策略进行处理。 #### 创建线程的方式 在Java中,可以通过以下几种方式创建线程: 1. **继承Thread类**:通过重写`Thread`类的`run`方法实现线程逻辑,并调用`start`方法启动线程。 2. **实现Runnable接口**:定义一个实现了`Runnable`接口的类,并在`run`方法中编写线程逻辑,然后将其传递给`Thread`类的构造函数。 3. **使用Callable和FutureTask**:`Callable`接口类似于`Runnable`,但可以返回结果并抛出异常。结合`FutureTask`可以实现更复杂的线程功能。 4. **使用线程池**:通过`ExecutorService`接口提供的线程池管理功能,简化线程的创建和管理过程。 以下是使用线程池的一个简单示例: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池 for (int i = 0; i < 10; i++) { Runnable task = () -> { System.out.println("Task executed by: " + Thread.currentThread().getName()); }; executorService.submit(task); // 提交任务到线程池 } executorService.shutdown(); // 关闭线程池 } } ``` #### 多线程同步与锁 在多线程环境中,多个线程可能同时访问共享资源,导致数据不一致的问题。为了解决这个问题,可以使用同步机制: - **synchronized关键字**:用于修饰方法或代码块,确保同一时间只有一个线程可以访问该方法或代码块。 - **Lock接口**:提供了比`synchronized`更灵活的锁机制,例如可重入锁、读写锁等。 #### 常见问题与解决方案 在多线程编程中,可能会遇到死锁、线程安全等问题。解决这些问题的关键在于合理设计线程间的协作机制,避免竞争条件的发生。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值