多线程初探

一.定义


线程是操作系统可以调度的最小单位,线程被包含在进程中,是进程中实际运作的最小单位。一个进程可以只有一个线程,也可以有多个线程。

二.为什么要使用线程?

1.优化程序响应,提升用户体验,使用线程可以防止应用程序假死

2.充分使用CPU资源

三.线程的简单使用

线程用来执行进程分配的子任务,该子任务在程序中就体现在执行某一个方法。那么,线程怎么知道执行哪一个方法呢?事实上线程不知道执行哪个方法,因此线程类(Thread)中使用了委托,以达到让线程执行某个方法的目的,线程具体使用步骤如下:

1.命名空间:using System.Threading;

2.创建线程需要调用的方法:method

3.创建线程:Thread thd=new
Thread(method);//Thread类提供了名为ThreadStart的委托,public delegate void
ThreadStart();。

4.设置线程状态:thd.Start();

四.实例:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

using
System;

using
System.Collections.Generic;

using
System.ComponentModel;

using
System.Data;

using
System.Drawing;

using
System.Linq;

using
System.Text;

using
System.Windows.Forms;

using
System.Threading;

namespace
多线程

{

    public
partial class ThreadFrm : Form

    {

        public
ThreadFrm()

        {

            InitializeComponent();

            //强制CLR以安全方式执行线程

            TextBox.CheckForIllegalCrossThreadCalls = true;

            //实例化委托

            countDelegate = new
CountDelegate(ShowNum);

        }

        private
void btnCount_Click(object
sender, EventArgs e)

        {

            thread = new
Thread(Count);

            thread.Start();

        }

        //声明委托用于以安全方式与UI线程进行通信

        public
delegate void CountDelegate(string
message);

        //定义委托对象,在构造函数中实例化

        CountDelegate countDelegate = null;

        Thread thread = null;

        /// <summary>

        /// 执行计算

        /// </summary>

        private
void Count()

        {

            for
(int
i = 1; i < 9999; i++)

            {

                //重点,使用Control类的Invoke方法回调方法

                this.Invoke(countDelegate,i.ToString());

            }

            MessageBox.Show("计算完毕!");

        }

        /// <summary>

        /// 为UI线程中的TextBox赋值

        /// </summary>

        /// <param name="message"></param>

        private
void ShowNum(string
message)

        {

            ShowNumTxt.Text = message;

        }

        private
void ThreadFrm_FormClosing(object
sender, FormClosingEventArgs e)

        {

        }    

    }

}

运行截图:

多线程初探,布布扣,bubuko.com

时间: 2024-10-14 00:30:36

多线程初探的相关文章

java 多线程初探

一直都很想写关于多线程的东西,以来可以巩固巩固自己的知识,而来可以看看自己的掌握的水平,因为一直都觉得这方面挺有意思的好了.废话不多说,入正题. java多线程,我们首先想多的是什么.进程,Thread,Runnable,start,run... 那我们就先从他们入手了.为什么会想到进程呢.以为一直都是多线程多进程的说.那他们有什么区别. 进程:进程是程序的运行和操作系统分配资源的最基本的独立单位.每个进程在没有特殊的处理下,是各自独立的. 线程呢:线程不能独立存在,线程必须依附于进程,线程共享

Windows多线程初探

线程是进程中的一个执行单位(每个进程至少有一个主线程),一个进程可以有多个线程,而一个线程只存在于一个进程中.在数据关系上属于一对多的关系.线程不占有系统资源,它所使用的资源全部由所属进程向系统申请. 在多处理器中,不同的线程可以同时运行在不同的CPU上,这样可以提高程序的运行效率.除此之外,有些时候必须使用多线程.例如,杀毒软件在查杀病毒的时候,它需要一边扫描相关的磁盘文件,一边显示当前的扫描进度以及发现的问题.如果把这几个工作放在一个线程中执行,会让程序看上去像卡住一样.在这种情况下,分为多

C++11 并发指南一(C++11 多线程初探)(转)

引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉. 相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的. 如果你对 C+

【Java】多线程初探

 参考书籍:<Java核心技术 卷Ⅰ > Java的线程状态 从操作系统的角度看,线程有5种状态:创建, 就绪, 运行, 阻塞, 终止(结束).如下图所示 而Java定义的线程状态有: 创建(New), 可运行(Runnable), 阻塞(Blocked), 等待(Waiting), 计时等待(Time waiting) 被终止(Terminated). 那么相比起操作系统的线程状态, Java定义的线程状态该如何解读呢? 如下: 1. Java的阻塞. 等待. 计时等待都属于操作系统中定义的

沉淀再出发:再谈java的多线程机制

沉淀再出发:再谈java的多线程机制 一.前言 自从我们学习了操作系统之后,对于其中的线程和进程就有了非常深刻的理解,但是,我们可能在C,C++语言之中尝试过这些机制,并且做过相应的实验,但是对于java的多线程机制以及其中延伸出来的很多概念和相应的实现方式一直都是模棱两可的,虽然后来在面试的时候可能恶补了一些这方面的知识,但是也只是当时记住了,或者了解了一些,等到以后就会变得越来越淡忘了,比如线程的实现方式有两三种,线程池的概念,线程的基本生命周期等等,以及关于线程之间的多并发引起的资源的抢占

C++11 并发指南系列(转)

本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C++11 并发指南二(std::thread 详解)(本章计划 1-2 篇,已完成 1 篇) C++11 并发指南三(std::mutex 详解)(本章计划 1-2 篇,已完成 2 篇) C++11 并发指南三(std::mutex 详解) C++11 并发指南三(Lock 详解) C++11 并发

JAVA线程-join

概念 join方法,一种特殊的wait,当前运行线程调用另一个线程的join方法,当前线程进入阻塞状态直到调用join方法的线程结束,再继续执行. 一般情况下,都是主线程创建一个子线程,子线程调用join方法,主线程会进入阻塞状态,直到子线程运行结束. 简单案例 public class JoinThreadDemo { public static void main(String[] args) { JoinRunnable runnable1 = new JoinRunnable(); Th

C#多线程之旅(4)——APM初探

原文地址:C#多线程之旅(4)——APM初探 C#多线程之旅目录: C#多线程之旅(1)——介绍和基本概念 C#多线程之旅(2)——创建和开始线程 C#多线程之旅(3)——线程池 C#多线程之旅(4)——APM初探 C#多线程之旅(5)——同步机制介绍 C#多线程之旅(6)——详解多线程中的锁 更多文章正在更新中,敬请期待...... C#多线程之旅(4)——APM初探 v博客前言 先交代下背景,前面几张内容主要是介绍多线程的基本知识,这一章是因为正好接触到了APM(异步编程模型),发现APM真

初探Java多线程

多线程是由Java提出的概念,那么什么是线程呢?这里会涉及到几个名字听着很类似的东西:程序.线程.进程. 程序:存储在磁盘上的一系列的文件,包括可执行文件和不可执行文件. 进程:在内存中,每一个程序都会开启一个进程. 线程:线程是进程的最小执行单元,线程在寄存器中,每一个线程需要消耗一定的cpu资源和512k到1M的内存资源. 多线程:也就是同一个程序中开启多个线程就是多线程. 使用多线程有什么样的优势呢?我们都知道在Java中,代码是一句一句地往下执行的,上面的代码没有执行完毕,下面的另一段代