c# sleep 例子-线程挂起

using System;
using System.Threading;
public class arr
{
public static void Main()
{
//int[] arr;
//arr = new int[5];
int luzi;
for(luzi=1;luzi<10000;luzi++)
{
Console.WriteLine("第"+luzi+"行");
if (luzi==5000)
{
Thread.Sleep(10000);
}
}
}
}

第5000行开始暂停10秒

NET 基础类库的System.Threading命名空间提供了大量的类和接口支持多线程。这个命名空间有很多的类。
System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常用的类。他有很多的方法,在这里我们将就比较常用和
重要的方法做一下介绍:
     Thread.Start():启动线程的执行;
  Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
  Thread.Resume():继续已挂起的线程;
  Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
  Thread.Join():阻塞调用线程,直到某个线程终止时为止
  Thread.Sleep():将当前线程阻塞指定的毫秒数;

  Thread.Abort():以开始终止此线程的过程。如果线程已经在终止,则不能通过Thread.Start()来启动线程。  
通过调用Thread.Sleep,Thread.Suspend或者Thread.Join可以暂停/阻塞线程。调用Sleep()和
Suspend()方法意味着线程将不再得到CPU时间。这两种暂停线程的方法是有区别的,Sleep()使得线程立即停止执行,但是在调用
Suspend()方法之前,公共语言运行时必须到达一个安全点。一个线程不能对另外一个线程调用Sleep()方法,但是可以调用Suspend()方

法使得另外一个线程暂停执行。对已经挂起的线程调用Thread.Resume()方法会使其继续执行。不管使用多少次Suspend()方法来阻塞一个
线程,只需一次调用Resume()方法就可以使得线程继续执行。已经终止的和还没有开始执行的线程都不能使用挂起。Thread.Sleep(int

x)使线程阻塞x毫秒。只有当该线程是被其他的线程通过调用Thread.Interrupt()或者Thread.Abort()方法,才能被唤醒。如
果对处于阻塞状态的线程调用Thread.Interrupt()方法将使线程状态改变,但是会抛出
ThreadInterupptedException异常,你可以捕获这个异常并且做出处理,也可以忽略这个异常而让运行时终止线程。在一定的等待时间
之内,Thread.Interrupt()和Thread.Abort()都可以立即唤醒一个线程。

我们可以通过使用Thread.Abort()方法来永久销毁一个线程,而且将抛出ThreadAbortException异常。使终结的线程可以捕获

到异常但是很难控制恢复,仅有的办法是调用Thread.ResetAbort()来取消刚才的调用,而且只有当这个异常是由于被调用线程引起的异常。对

于A和B两个线程,A线程可以正确的使用Thread.Abort()方法作用于B线程,但是B线程却不能调用Thread.ResetAbort()来
取消Thread.Abort()操作。
    
Thread.Abort()方法使得系统悄悄的销毁了线程而且不通知用户。一旦实施Thread.Abort()操作,该线程不能被重新启动。调用了这

个方法并不是意味着线程立即销毁,因此为了确定线程是否被销毁,我们可以调用Thread.Join()来确定其销毁,Thread.Join()是一个
阻塞调用,直到线程的确是终止了才返回。但是有可能一个线程调用Thread.Interrupt()方法来中止另外一个线程,而这个线程正在等待
Thread.Join()调用的返回。
   
尽可能的不要用Suspend()方法来挂起阻塞线程,因为这样很容易造成死锁。假设你挂起了一个线程,而这个线程的资源是其他线程所需要的,会发生什么
后果。因此,我们尽可能的给重要性不同的线程以不同的优先级,用Thread.Priority()方法来代替使用Thread.Suspend()方
法。
Thread类有很多的属性,这些重要的属性是我们多线程编程必须得掌握的。
  Thread.IsAlive属性:获取一个值,该值指示当前线程的执行状态。如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false。
  Thread.Name 属性:获取或设置线程的名称。
  Thread.Priority 属性:获取或设置一个值,该值指示线程的调度优先级。
  Thread.ThreadState 属性:获取一个值,该值包含当前线程的状态。thread状态

  System.Threading.Thread.ThreadState属性定义了执行时线程的状态。线程从创建到线程终止,它一定处于其中某一个
状态。当线程被创建时,它处在Unstarted状态,Thread类的Start()
方法将使线程状态变为Running状态,线程将一直处于这样的状态,除非我们调用了相应的方法使其挂起、阻塞、销毁或者自然终止。如果线程被挂起,它将

处于Suspended状态,除非我们调用resume()方法使其重新执行,这时候线程将重新变为Running状态。一旦线程被销毁或者终止,线程处

于Stopped状态。处于这个状态的线程将不复存在,正如线程开始启动,线程将不可能回到Unstarted状态。线程还有一个Background状

态,它表明线程运行在前台还是后台。在一个确定的时间,线程可能处于多个状态。据例子来说,一个线程被调用了Sleep而处于阻塞,而接着另外一个线程调

用Abort方法于这个阻塞的线程,这时候线程将同时处于WaitSleepJoin和AbortRequested状态。一旦线程响应转为Sle阻塞或
者中止,当销毁时会抛出ThreadAbortException异常。线程优先级

  System.Threading.Thread.Priority枚举了线程的优先级别,从而决定了线程能够得到多少CPU时间。高优先级的线程通

常会比一般优先级的线程得到更多的CPU时间,如果不止一个高优先级的线程,操作系统将在这些线程之间循环分配CPU时间。低优先级的线程得到的CPU时
间相对较少,当这里没有高优先级的线程,操作系统将挑选下一个低优先级
的线程执行。一旦低优先级的线程在执行时遇到了高优先级的线程,它将让出CPU给高优先级的线程。新创建的线程优先级为一般优先级,我们可以设置线程的优
先级别的值,如下面所示: Highest  AboveNormal   Normal   BelowNormal   Lowest

时间: 2024-10-12 04:41:07

c# sleep 例子-线程挂起的相关文章

转: 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件--其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁.另外,在长时间计算期间挂起线程也可能导致问题. 下面的代码演示了通过休眠来延缓运行

【Java并发编程】:线程挂起、恢复与终止

挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件--其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁.另外,在长时间计算期间挂起线程也可能导致问题. 下面的代码演示了通过休眠来延缓运行,模拟长时间运行的情况,使线程更可能在不适当的时候被挂起: public class DeprecatedSuspendRe

Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)

JAVA大数据中高级架构 2018-11-06 14:24:56挂起和恢复线程Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件--其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁.另外,在长时间计算期间挂起线程也可能导致问题. 下面的代码演示了通过休眠来延缓运行,模拟长时间运行的情况,使线程更可能在不适当的时候被挂起: publi

利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态

版权声明:专注于计算机网络安全学习 https://blog.csdn.net/u011672712/article/details/51586030 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

【Bug】httpClient使用代理后线程挂起

背景: 需要去监控某个网站,所以写了一个爬虫程序,被爬取的链接是Https,使得的是网上的代理,按ip使用量计费,该计费模式确实好用! 框架:httpClient 4.5.10 Java: Java 9 implementation 'org.apache.httpcomponents:httpclient:4.5.10' 问题: 然后问题出现了,因为是一个监控程序,所以需要不断的轮询,然后开了10个左右线程轮询,结果跑了半小时后,10个线程全部刮起,thread dump一下发现每个线程都如下

python例子-线程和队列

#!/usr/bin/python #coding:utf-8 import threading import time import Queue import random #多线程理解 def print_time(threadName,delay,counter): while counter: time.sleep(delay) print "%s:%s\n" %(threadName,time.ctime(time.time())) counter -=1 def main(

linux 线程挂起恢复

1 //============================================================================ 2 // Name : thread.cpp 3 // Author : LittleKu 4 // Version : 5 // Copyright : LittleKu 6 // Description : thread in C++, Ansi-style 7 //=================================

线程的挂起和恢复 转载

(1)概述:线程的挂起操作实质上就是使线程进入"非可执行"状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行.在线程挂起后,可以通过重新唤醒线程来使之恢复运行. run() 和start() 是大家都很熟悉的两个方法.把希望并行处理的代码都放在run() 中:stat() 用于自动调用run(),这是Java的内在机制规定的.当一个线程进入"非可执行"状态,必然存在某种原因使其不能继续运行,这些原因可能是如下几种情况:     A,

大白话讲解.NET中挂起线程的Thread.Sleep()方法

最近在学习C#多线程编程的时候,对线程的挂起这一部分总感觉理解的不够清楚,看过几本书上的资料,但也都大多语焉不详,草草带过.幸好在园子里看到这样一篇很有意思的文章,有些<大话XXXX>丛书的风格,写的相当生动,可供入门理解用.在感谢原作者的同时也想借此机会将知识与大家分享,也方便自己学而时习之. 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果