C#多线程学习笔记
2014-01-10 18:46
399 查看
不废话,废话都在代码里
StateTest
/******************************************************** * Copyright(C),2013-2014,iFLYTEK * FileName : * Author : ShintoRuan * Date : * Description : * Others : * History : ********************************************************/ namespace Multithreading { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; public class ThreadStateDemo { /// <summary> /// 定义一个全局变量,用于记录主线程状态 /// </summary> public static Thread threadBackup { get; set; } /// <summary> /// 该测试主入口 /// </summary> public static void Run() { ThreadStateDemo test = new ThreadStateDemo(); test.StateTest(); } /// <summary> /// 主方法 /// </summary> public void StateTest() { threadBackup = Thread.CurrentThread; Thread myThread1 = new Thread(new ThreadStart(TestTarget.print)); Thread myThread2 = new Thread(new ThreadStart(TestTarget.print)); Thread myThread3 = new Thread(new ThreadStart(TestTarget.IsBackGroundTest)); Console.WriteLine("开始前:{0}",myThread1.ThreadState); myThread1.Start(); Console.WriteLine("开始时:{0}", myThread1.ThreadState); Thread.Sleep(1000); Console.WriteLine("睡眠时:{0}", myThread1.ThreadState); Thread.Sleep(2000); //这种方法无法打印出suspendRequest状态, Console.WriteLine("挂起时:{0}", myThread1.ThreadState); myThread1.Resume(); Console.WriteLine("解挂后:{0}", myThread1.ThreadState); myThread1.Join(); //=======================Start:myThread2========================== myThread2.Start(); myThread2.Abort(); Console.WriteLine("Abort瞬间:{0}",myThread2.ThreadState); Thread.Sleep(50); Console.WriteLine("Abort完成:{0}", myThread2.ThreadState); //======================IsbackGround=============================== myThread3.IsBackground = false; //默认为false myThread3.Name = myThread3.IsBackground ? "后台线程" : "前台线程"; myThread3.Start(); Thread.CurrentThread.Abort(); } } /// <summary> /// 目标类 /// </summary> public class TestTarget { /// <summary> /// 打印+号 /// </summary> public static void print() { for (int i = 0; i < 1; i++) { //在这暂停2秒 if (i==0) { Thread.Sleep(2000); } //到这被挂起,等待解挂 if (i==0) { Thread.CurrentThread.Suspend(); } //在这缓冲一下,防止下面方法在myThread1.Join()之前运行 if (i==0) { Thread.Sleep(30); } //打印主线程被Join后的状态 if (i==0) { Console.WriteLine("Join后:{0}",ThreadStateDemo.threadBackup.ThreadState); } //终于可以打印加号了 Console.WriteLine("+"); } } public static void IsBackGroundTest() { Thread.Sleep(2000); Console.WriteLine("2秒后你将得到救赎!"); } } }
StateTest
相关文章推荐
- [C#]C#学习笔记-多线程
- C#学习笔记之多线程
- c# 多线程学习笔记 (一)基本概念
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- 黑马程序员—学习笔记之C#多线程
- C#多线程学习笔记之(abort与join配合使用)
- c#学习笔记之十五 目前多线程执行函数的思路
- 多线程要点--CLR C#学习笔记
- java多线程学习笔记2---理解原子性和可见性
- C#学习笔记二
- Java学习笔记(多线程)
- 【卷土重来之C#学习笔记】(三) 类型 存储和变量
- iOS学习笔记-131.多线程24——多图下载4_第四种实现方式(缓存使用NSCache)
- 转:C#制作ORM映射学习笔记一 自定义Attribute类
- c#学习笔记
- C#学习笔记
- C#学习笔记----C#中的闭包机制
- C#学习笔记——关于定义属性
- C#学习笔记(二十):Windows应用程序安装部署概念
- C#学习笔记--关于银行存取款的小实验