您的位置:首页 > 编程语言 > C#

C#多线程学习笔记

2014-01-10 18:46 399 查看
不废话,废话都在代码里

/********************************************************
* 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: