.NET Windows 多线程thread编程

.NET Windows 多线程thread编程

英寸net中,thread类用于定义线程、启动线程和销毁线程,所有这些都包含在这个类中。定义一个线程,必须指定这个线程的功能,也就是这个线程做什么。

进程

:工厂搬砖,10个工人搬砖1000块。

线程

:每个工人移动100块砖,即一个任务使用线程,异步移动:手动移动,10个工人同时移动,高效异步。如果不使用线程,第一个人移动后第二个人移动会很慢。

什么时候不能用线程

:如果只有一个小车要移动,那么,在这种情况下,你不应该使用线程。因为只有一辆电车,所有的线程都在争夺和等待这辆电车,所以你不能用线程。如果此时使用线程,会浪费资源,因为每个线程都有自己的资源。比如承包商(CPU)要同时管理这10个工人,但实际上只有一个工人在做事。线程销毁:销毁时需要考虑一些问题。例如,当移动砖块时,你不能在移动过程中摧毁一个工人。你把砖放在哪里?

1..net里使用线程

.net使用thread类,定义线程,启动和销毁线程,都包括在这个类中定义一个线程。你必须指定这个线程的功能,也就是这个线程做什么,搬砖还是挑水EG:复制代码代码如下:thread t=new thread(new thread start(ST . worker method));t . Start();public void worker method(){ Console。WriteLine( AA );}

2.如果使用带有参数的线程

线程本身不能带参数,只能在类中定义一个全局变量。在线程之前给这个变量赋值,然后在线程的函数中使用这个变量,达到传递参数的目的。例:复制代码如下:公共类simple thread { private string proc parameter= ;public simple thread(string str para){ proc parameter=str para;} public void worker方法(){console.writeline(参数输入为: proc parameter );} } class main class {//summary//应用程序的主入口点。////summary[stat thread]static void main(string[]args){ simple thread ST=new simple thread(这是参数字符串!);Thread t=new Thread(new ThreadStart(ST . worker method));t . Start();t.Join(超时。无限);} }

3.线程和委托

委托的目的:类似于C的指钟,是用函数作为参数来传递

4.应用程序域

。十个工人搬自己的工作,彼此孤立。如果一个人抱怨自己不会动,不会影响到其他人。计算机也是一样,应用之间没有干扰,程序之间没有访问,一个程序死了,整个计算机部门都死了。

5.线程池

就像记忆。如果工人搬砖,突然两个工人因为某种原因搬不动了,那就从线程池中调用其他线程来做,性能不错。创建一个线程会浪费时间和资源。例如,

6.异步调用

调用web服务。同步:当调用WebService时,只有在调用完成后才会执行下面的代码。如果,在调用过程中,它被阻塞了,那么你就要等待很长时间来进行异步调用:调用WebService,代码继续执行,WebService完成后,再发送回receiver对象。

7.多线程的应用,利用线程排序

排序1000个数,如果一个线程排队,需要1000毫秒,如果10个线程排队,只需要100毫秒左右。当然,在排序的时候,a[i] a[i 1],同时,只有一个线程可以对其进行操作。因此,在For中,当I和i 1交换时,需要提前锁定它。复制代码如下:for(int t=0;t x;T )//X是线程数{ thread thread=new thread(new threadstart(sort));//Sort排序线程的方法。名称=转换。ToString(t);线程。start();} public void Sort(){ try { while(true){ swaped=false;for(int j=0;j值数组。长度-1;j){ lock(type of(Thread))//lock { if(value array[j]value array[j 1]){ int t=value array[j];value array[j]=value array[j 1];value array[j 1]=T;swaped=true} } }线程。睡眠(1);如果(!swapped){ break;} }线程。current thread . Abort();} catch (Exception ex) { if(互锁。increment(ref thread counter)==Convert。ToInt64(ddlThreadNum。SelectedItem.ToString()。ToString()。trim())Display();} }

.NET Windows 多线程thread编程