多线程学习进程

第一章,线程

什么是单线程?

在一个程序中只允许一个主线程(cpu分配的)来执行不同的任务。简而言之就是一个任务一个人独干,在没有干完之前不回去做其他的,直到当前的任务做完。会导致“假死现象”。

例子:我们平时定义的方法及实现,然后普通调用。就是属于单线程操作。

什么是线程?

线程是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

什么是多线程?

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

文字总结:

在C#中我们开启一个应用程序就是打开了一个进程,这个进程中包括一个主线程。我们可以在此基础上在增加自己写的单个或多个线程,来执行我们想要完成的任务。

在Thread线程类中我们常用到的一样方法:

  • Start():启动线程;
  • Sleep(int):静态方法,暂停当前线程指定的毫秒数;
  • Abort():通常使用该方法来终止一个线程;之后不能使用Start():启动线程。会报错误。
  • Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
  • Resume():恢复被Suspend()方法挂起的线程的执行。

  在C#中开启一个线程,来执行我们所写的方法。主要是通过ThreadStart代理委托来实现。学习代码如下:

1.无参数的线程

 class Program
        {
            static void Main(string[] args)
            {
                OneThread();//方法调用
            }
            static void OneThread()
            {                  //创建线程去执行这个方法
                Thread objThread = new Thread(ThreadMethod);
                objThread .IsBackground = true;  //我们创建的线程属于前台线程,设需置当前子线程为后台线程,为后台线程意味着,主线程(前台线程)关闭后,其他子线程都同时关闭
                objThread .Start();//标记这个线程准备就绪了,可以随时被执行。具体什么什时候执行这个线程有cpu决定。

                Console.ReadLine();
            }

            static void ThreadMethod()//无参数
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("我是线程调用的!!!");
                }
            }

        }

线程分为:前台线程和后台线程。另见前台线程和后台线程总结。

知识点:Control.CheckForIllegalCrossThreadCalls = false;取消跨线程的访问 让可以跨线程访问Control 是基类

在需要使用跨线程时在.net环境下会出现错误,需要取消跨线程的访问。在关闭某个线程时可能会出现DIspose错误这是因为主线程已关闭而新建的线程还在运行,所以会出现错误

解决方法为:通过判断当前的新建线程是否为null

例如:

Thread th=new Thread(线程需要执行的方法);

if(th!=null)

{

th.Abort();  //结束这个线程

}

2.带参数的多线程

  class Program
        {
            static void Main(string[] args)
            {
                OneThread();
            }

            static void OneThread()
            {

            object ThreadParameter = "P";
            Thread ThreadB = new Thread(new ParameterizedThreadStart(ThreadMethodParameter));
            threadB.IsBackground = true;// 设置当前子线程为后台线程,为后台线程意味着,主线程关闭后,其他子线程都同时关闭
            threadB.Start(ThreadParameter);

            Console.WriteLine("Main Write:M");

            Console.ReadLine();
            }

            /// <summary>
            /// 带参数线程
            /// </summary>
            /// <param name="Parameter">只能定义一个object参数,因为委托ParameterizedThreadStart为单参数object类型</param>
            static void ThreadMethodParameter(object Parameter)//带参数的线程
            {
                for (int j = 0; j < 10; j++)
                {
                    Console.WriteLine("我后面的Parameter是参数!" + Parameter);
                }
            }

        }

注:public delegate void ParameterizedThreadStart(object obj);//委托ParameterizedThreadStart为单参数object类型

在代理里分别开启两个线程。

第一个线程objThread 没带参数,线程运行时去执行ThreadMethod()方法.

第二个线程ThreadB带上一个Object参数,通过ParameterizedThreadStart委托去执行ThreadMethodParameter(object Parameter)方法.此线程在调用Start()时传入所需参数。

(写代码时我在想为什么带参数线程只能传一个object参数?看了代码才知道ParameterizedThreadStart只有一个参数没有重载)。

时间: 2024-08-06 16:06:03

多线程学习进程的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Qt多线程学习:创建多线程

[为什么要用多线程?] 传统的图形用户界面应用程序都仅仅有一个运行线程,而且一次仅仅运行一个操作.假设用户从用户界面中调用一个比較耗时的操作,当该操作正在运行时,用户界面一般会冻结而不再响应.这个问题能够用事件处理和多线程来解决. [Linux有线程的概念吗?] 传统的UNIX系统也支持线程的概念,但一个进程里仅仅同意有一个线程,这样多线程就是多进程.Linux下的Posix线程(pthreads)是一种轻量级的进程的移植性实现,线程的调度由内核完毕,每一个线程都有自己的编号.假设使用线程,整体

Java多线程学习(详细)

一.进程与线程的区别 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 线程和进程一样分为五个阶段:创建.就绪.运行.阻塞.终止.     多进程是指操作系统能同时运行多个任务(程序).     多线程是指在同一程序中有多个顺序流在执行. 在java中要想实现多线程,有两种手段,一

C#多线程学习(一) 多线程的相关概念

什么是进程?    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程?    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 多线程的好处:    可以提

C#多线程学习(一) 多线程的相关概念(转)

什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程?多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 多线程的好处:可以提高CPU的利用率.在多线程程序中

多线程学习 + o2o简识

多线程学习: ( 1.NSThread 2.NSOperationQueue 3.GCD ) 1.进程和线程: 进程:app无法独立运行,需要分配内存空间,每个app至少有一个进程,是应用程序的开始(缺点:不能同时执行) 线程:是应用程序运行的最小单元可以多个线程并发同时执行,防止主线程堵塞,增加运行效率. 主线程:又叫UI主线程,程序运行都是在主线程加载,加载视图,但不可加载数据,因为请求网络数据的时间特别长,会出现空白现象(更新UI一定要在主线程中写) 子线程:没法加载UI,UI只在主线程中

Java多线程学习

写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕.你将会对Java里头的高并发场景下的线程有更加深刻的理解. 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线

java多线程学习(1)

1)多线程与多进程的区别 多线程和多进程有什么区别呢?本质的区别在于每个进程有它自己的变量的完备集,线程则共享相同的数据. 对程序来说,共享的变量会使得线程之间的通信比进程间的通信更加有效和简单:同时,线程相对于进程来说,更加的“轻量级”, 线程的创建和销毁要比 进程的 开销要小的多. 2)多线程程序的构造 多线程的构造通常有两种方法, 第一种方法是,构建一个Thread的子类,并重写它的run()方法: 1 class MyThread extends Thread 2 { 3 4 publi

Java多线程学习(吐血超具体总结)

林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书了,可是假设最基本的你都学掌握好,又怎么能更上一个台阶呢?假设你认为此文非常简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕.你将会对Java里头的高并发场景下的线程有更加深刻的理解. 文件夹(?)[-] 一扩展ja