.Net学习笔记----2015-07-03(线程/多线程)

单线程带来的问题

如果让一个程序做多个事,会出现“卡死”的状态

为什么用多线程:

1、让计算机“同时”做多件事情,节约时间

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

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

4、获得当前线程和当前进程

线程分为前台线程和后台线程

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

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

产生一个线程的步骤

1、编写产生线程所要执行的方法

2、System.Threading命名空间

3、实例化Thread类,并传入一个指向线程所要运行的方法委托(此时线程已经产生,但还没有运行)

4、调用Thread实例的Start方法,标记该线程可以被CPU执行,具体执行时间由CPU决定

在.Net下,不允许跨线程的访问

线程在被Abort(关闭线程的方法)之后就无法再重新Start了

Thread.Sleep(毫秒),静态方法,可以使当前线程停止一段时间运行

Name线程名

Thread.CurrentThread获得当前的线程引用

        //创建一个线程去执行这个方法
        Thread th;
        private void button1_Click(object sender, EventArgs e)
        {
            //创建一个线程去执行这个方法
            th = new Thread(Test);
            //标记这个线程已经准备就绪了,可以随时被执行。具体什么时候执行这个线程,由CPU决定
            //将线程设置为后台线程
            th.IsBackground = true;
            th.Start();
            //Test();
        }
        private void Test()
        {
            for (int i = 0; i < 10000; i++)
            {
                //Console.WriteLine(i);
                textBox1.Text = i.ToString();//这个会导致跨线程操作,报异常
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //取消跨线程的访问
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //当点击关闭主窗体的时候,判断新线程是否为null,如果不为null则手动关闭
            if (th != null)
            {
                //结束这个线程
                th.Abort();
                //线程在被Abort之后就无法再重新Start了
            }
        }
    }
时间: 2024-10-02 12:24:08

.Net学习笔记----2015-07-03(线程/多线程)的相关文章

转:学习笔记: Delphi之线程类TThread

学习笔记: Delphi之线程类TThread - 5207 - 博客园http://www.cnblogs.com/5207/p/4426074.html 新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时间. TThread-简单的开始 在Delphi的VCL中封装了一个TThread类用于多线程的开发,这样比较符合面向对象的思想,同时又可以提

【Ext.Net学习笔记】07:后续

程序员必看书籍(转载) C++: Prata<C++ Primer Plus>:基础,第一本书.(之前的版本也可,不过推荐最新的) Lippman<Inside C++ Object Model>:初级,加深语言层次上的理解.不过有点小老了.里面的cfront编译器早退出江湖好久了.思想值得学习 侯捷<STL源码剖析>:第三本书,中级,深入STL Vandevoorde<C++ Template>:第四本,中级,范式编程 罗剑锋<Boost>两本

Java并发编程学习笔记(一)线程安全性 1

什么是线程安全性: 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问."共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其生命周期内可以发生变化. 一个对象是否需要线程安全的,取决于他是否被多个线程访问.这指的是在程序中访问对象的方式,而不是对象要实现的功能.要使得对象时线程安全的,需要采用同步机制来协同对对象可变状态的访问.如果无法实现协同,那么可能导致数据破坏以及其他不该出现的结果. 如果当多个线程访

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

疯狂Java学习笔记(64)------------线程转换

线程的生命周期 由上图可以看出: 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞. 各个状态细节不再赘述,具体请看http://blog.csdn.net/u011225629/article/details/46288995此篇博文 此篇博文主要讲述各个状态的实例! 一.新建和就绪状态 此处不做细致的讲解,在上一篇博文中已经讲解过了! package com.haixu.thread2; public class InvokeRun exte

python学习笔记-(十三)线程、进程、多线程&amp;多进程

为了方便大家理解下面的知识,可以先看一篇文章:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 线程 1.什么是线程? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 2.python GIL全局解释器锁(仅需了解) 无论你启多少个线程,你有多少个cpu, Python在执行的时

Java多线程高并发学习笔记(三)——深入理解线程池

线程池最核心的一个类:ThreadPoolExecutor. 看一下该类的构造器: public ThreadPoolExecutor(int paramInt1, int paramInt2, long paramLong, TimeUnit paramTimeUnit, BlockingQueue<Runnable> paramBlockingQueue) { this(paramInt1, paramInt2, paramLong, paramTimeUnit, paramBlockin

Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解

   我们知道在多线程编程中,我们很大的一部分内容是为了解决线程间的资源同步问题和线程间共同协作解决问题.线程间的同步,通俗我们理解为僧多粥少,在粥有限情况下,我们怎么去防止大家有秩序的喝到粥,不至于哄抢都没得喝.线程讲协作,我们可以理解为我们在医院看病的时候,我们要先挂号,才能看病.现在医院有很多病人排队,怎么协调病人都有秩序的先挂号,后看病.本篇文章的重点不在此,也不是在此一下子能分析完,我们先从Java JVM的角度来理解多线程的一些方面. 我们知道多线程间的数据同步,我们是通过加锁的操作

疯狂Java学习笔记(62)------------线程初识

线程初识 没有线程编程的程序好比一个人一只手干活,而多线程的程序就好比一个人多只手干活. 进程是系统资源分配的独立单位,而线程是可调度运行的独立单位,一个进程可以拥有多个线程,线程是进程并行完成的多个任务. 进程.线程.并发执行 首先我们先来认识一下进程.线程.并发执行的概念: 一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程.启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的. 在进程中,有些程序流程块是可以乱序执行的,并

python学习笔记(十) - 进程和线程

线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 一.多进程 1. multiprocessing模块时跨平台版本的多线程模块 process类代表一个进程对象,创建子进程时,只需要传入一个执行函数和函数的参数,使用start方法启动 join方法可以等待子进程结束后再继续往下运行,通常用于进程间同步. from multiprocessing import Process import os # 子进程要执行的