学习C#线程

无意间看到了关于C#线程的讲解。经过一下午的学习后,慢慢的对线程也有了一定的理解。这里讲解的是最基础的内容,包括线程的创建、睡眠、等待、终止。

实验环境:Visual studio 2010.

使用语言:C#

内容:创建、睡眠、等待、中止线程

1.创建新线程对象 Thread t=new Thread();

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6
 7 namespace 线程学习
 8 {
 9     class Program
10     {
11         static void PrintNumbers()
12         {
13
14             Console.WriteLine("Starting...");
15             for (int i = 1; i < 10; i++)
16             {
17                 Console.WriteLine(i);
18             }
19         }
20
21         static void Main(string[] args)
22         {
23             Thread t = new Thread(PrintNumbers);
24             t.Start();
25             PrintNumbers();
26         }
27     }
28 }

通过Thread t=new Thread创建新对象后,t为子线程,t.Start()开始执行子线程,子线程执行构造对象中的PrintNumber()函数,父线程执行下一行的PrintNumbers()函数,两线程并发,所以结果不定。

2.线程睡眠   调用Slee()函数,选择让线程暂时“睡眠“

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 线程学习
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i+"父线程");
            }
        }
        static void PrintNumbersWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                Console.WriteLine(i+"子线程");
            }
        }

        static void Main(string[] args)
        {
            Thread t = new Thread(PrintNumbersWithDelay);
            t.Start();
            PrintNumbers();
        }
    }
}

创建线程后,子线程t执行PrintNumbersWithDelay()函数,其中每循环一次就睡眠一秒,父线程执行下一行的PrintNumbers()函数,两线程并发执行。

3.线程等待 调用join()函数,让线程按照想要的顺序执行

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 namespace 线程学习
 7 {
 8     class Program
 9     {
10         static void PrintNumberWithDelay()
11         {
12             Console.WriteLine("Starting...");
13             for (int i = 1; i < 10; i++)
14             {
15                 Thread.Sleep(TimeSpan.FromSeconds(1));
16                 Console.WriteLine(i);
17             }
18         }
19         static void PrintNumbers()
20         {
21             Console.WriteLine("Starting...");
22             for (int i = 1; i < 10; i++)
23             {
24                 Console.WriteLine(i);
25             }
26         }
27         static void Main(string[] args)
28         {
29             Console.WriteLine("Starting...");
30             Thread t = new Thread(PrintNumberWithDelay);
31             t.Start();
32             t.Join();
33             PrintNumbers();
34             Console.WriteLine("Thread completed");
35         }
36     }
37 }

创建线程后,t.join()之后的语句(即父线程)必须等待之前的语句执行完后,才能执行。

4.线程终止 调用Abort()函数,杀死该线程。

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 线程学习
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }
        static void PrintNumberWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(TimeSpan.FromSeconds(1));

            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Starting Program..");
            Thread t = new Thread(PrintNumberWithDelay);
            t.Start();
            t.Abort();
            Console.WriteLine("A thread has been aborted");
            t = new Thread(PrintNumbers);
            t.Start();
            PrintNumbers();
        }
    }
}

使用Abort()结束子线程。后面的代码跟前面例一类似

时间: 2024-08-09 04:05:50

学习C#线程的相关文章

Java并发学习之五——线程的睡眠和恢复

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Thread类的sleep方法,可以使线程睡眠.此方法接收一个整数作为参数,表示线程暂停运行的毫秒数.在调用sleep方法后,当时间结束时,JVM会安排他们CPU时间,线程会继续按指令执行. 另一种可能是使用一个有TimeUnit列举元素的sleep方法,使用线程类的sleep方法让当前线程睡眠,但是它接收的参数单位后会转成毫秒的. 2.当你调用sleep()方法,Thread离开CPU并在一段时间内停止运行.在这段时间内,他是不消耗CP

java SE学习之线程同步(详细介绍)

       java程序中可以允许存在多个线程,但在处理多线程问题时,必须注意这样一个问题:               当两个或多个线程同时访问同一个变量,并且一些线程需要修改这个变量时,那么这个程序是该如何执行?              也就是先访问这个变量还是先修改这个变量.              在学习线程的这段时间里,我也一直被这个问题所困扰!但是今天终于算是搞明白了.              于是将这些好的列子一一列举出来,分享一下. (1)什么是线程同步 ?      

Python 学习笔记 - 线程(2)

前面学习了线程基本的概念和创建线程的两种方法,现在看看多线程如何处理竞争条件(racing condition)的问题. 比如说,下面的例子中 我使用了第二种创建的方式,自定义一个类,继承Thread类,然后自定义run()来执行我的方法.在这个run方法里面,每次都对全局变量加1 在主线程里面,他调用一个自己定义的函数,在这个函数里面创建了5000个线程:每个线程都加入一个列表,然后对每个对象都使用join,这是确保主线程等着直到所有子线程完成.最后输出结果 import time impor

java基础学习总结-----线程(一)

转:基础学习总结----线程(一)http://www.cnblogs.com/xdp-gacl/p/3633936.htmljava 一.线程的概念 线程:线程是一个程序里面不同的执行路径 进程:一个静态的概念,机器上的一个.class文件,机器上的一个.exe文件,这个叫做一个进程. 程序的执行过程: 1.首先把程序的代码放到内存的代码区里面,代码放到代码区后并没有马上开始执行,但这时候说明了一个进程准备开始,进程已经产生,但还没有开始执行,这就是进程.其实是2.一进程的执行指的是进程里面主

java基础学习总结——线程(二)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——线程(二) 一.线程的优先级别 线程优先级别的使用范例: 1 package cn.galc.test; 2 3 public class TestThread6 { 4 public static void main(String args[]) { 5 MyThread4 t4 = new MyThread4(); 6 MyThread5 t5 = new MyThread5(); 7 Thread t1

java基础学习总结——线程(一)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——线程(一) 一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe文件,这个叫做一个 进程.程序的执行过程都是这样的:首先把程序的代码放到内存的代码区里面,代码放到代码区后并没有马上开始执行,但这时候说明了一个进程准备开始,进程已 经产生了,但还没有开始执行,这就是

Java并发学习之三——线程的中断

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.一个多个线程在执行的Java程序,只有当其全部的线程执行结束时(更具体的说,是所有非守护线程结束或者某个线程调用System.exit()方法的时候),它才会结束运行.有时,你需要为了终止程序而结束一个线程,或者当程序的用户想要取消某个Thread对象正在做的任务. 2.Java提供中断机制来通知线程表明我们想要结束它.中断机制的特性是线程需要检查是否被中断,而且还可以决定是否相应结束的请求.所以,线程可以忽略中断请求并且继续运行. 3.

多线程编程学习笔记——线程池(一)

接上文 多线程编程学习笔记——线程同步(一) 接上文 多线程编程学习笔记——线程同步(二) 接上文 多线程编程学习笔记——线程同步(三) 创建多线程操作是非常昂贵的,所以每个运行时间非常短的操作,创建多线程进行操作,可能并不能提高效率,反而降低了效率. 如果你有非常多的执行时间非常短的操作,那么适合作用线程池来提高效率,而不是自行创建多线程. 线程池,就是我们先分配一些资源到池子里,当我们需要使用时,则从池子中获取,用完了,再放回池子里. .NET中的线程池是受CLR管理的,TheadTool类

多线程编程学习笔记——线程同步(三)

接上文 多线程编程学习笔记——线程同步(一) 接上文 多线程编程学习笔记——线程同步(二) 七.使用Barrier类 Barrier类用于组织多个线程及时在某个时刻会面,其提供一个回调函数,每次线程调用了SignalAndWait方法后该回调函数就会被执行. 1.代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //