ManualResetEvent详解

ManualResetEvent详解原文来自:http://www.cnblogs.com/tianzhiliang/archive/2011/03/04/1970726.html1.源码下载:下载地址:http://files.cnblogs.com/tianzhiliang/ManualResetEventDemo.rarDemo:2.ManualResetEvent详解…

大家好,又见面了,我是你们的朋友全栈君。

原文来自:http://www.cnblogs.com/tianzhiliang/archive/2011/03/04/1970726.html

1. 源码下载:

    下载地址:http://files.cnblogs.com/tianzhiliang/ManualResetEventDemo.rar

    Demo:

ManualResetEvent详解

2. ManualResetEvent详解

    ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态,此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。一旦它被终止,ManualResetEvent 将保持终止状态(即对 WaitOne 的调用的线程将立即返回,并不阻塞),直到它被手动重置。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,如果初始状态处于终止状态,为 true;否则为 false。

?
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading;
 
namespace
ManualResetEventDemo
{
    
class
MREDemo
    
{
        
private
ManualResetEvent _mre;
 
        
public
MREDemo()
        
{
            
this
._mre =
new
ManualResetEvent(
true
);
        
}
 
        
public
void
CreateThreads()
        
{
            
Thread t1 =
new
Thread(
new
ThreadStart(Run));
            
t1.Start();
 
            
Thread t2 =
new
Thread(
new
ThreadStart(Run));
            
t2.Start();
        
}
 
        
public
void
Set()
        
{
            
this
._mre.Set();
        
}
 
        
public
void
Reset()
        
{
            
this
._mre.Reset();
        
}
 
        
private
void
Run()
        
{
            
string
strThreadID =
string
.Empty;
            
try
            
{
                
while
(
true
)
                
{
                    
// 阻塞当前线程
                    
this
._mre.WaitOne();
 
                    
strThreadID = Thread.CurrentThread.ManagedThreadId.ToString();
                    
Console.WriteLine(
"Thread("
+ strThreadID +
") is running..."
);
 
                    
Thread.Sleep(5000);
                
}
            
}
            
catch
(Exception ex)
            
{
                
Console.WriteLine(
"线程("
+ strThreadID +
")发生异常!错误描述:"
+ ex.Message.ToString());
            
}
        
}
 
    
}
}

 

?
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
 
namespace
ManualResetEventDemo
{
    
class
Program
    
{
        
static
void
Main(
string
[] args)
        
{
            
Console.WriteLine(
"****************************"
);
            
Console.WriteLine(
"输入\"stop\"停止线程运行..."
);
            
Console.WriteLine(
"输入\"run\"开启线程运行..."
);
            
Console.WriteLine(
"****************************\r\n"
);
 
            
MREDemo objMRE =
new
MREDemo();
            
objMRE.CreateThreads();
 
            
while
(
true
)
            
{
                
string
input = Console.ReadLine();
                
if
(input.Trim().ToLower() ==
"stop"
)
                
{
                    
Console.WriteLine(
"线程已停止运行..."
);
                    
objMRE.Reset();
                
}
                
else
if
(input.Trim().ToLower() ==
"run"
)
                
{
                    
Console.WriteLine(
"线程开启运行..."
);
                    
objMRE.Set();
                
}
            
}
             
        
}
    
}
}

转载于:https://www.cnblogs.com/nele/p/5552451.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161167.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js中获取html元素之document.documentElement

    js中获取html元素之document.documentElementdocument.documentElementDocument.documentElement是一个会返回文档对象(document)的根元素的只读属性(如HTML文档的<html>元素)。对于任何非空HTML文档,调用document.documentElement总是会返回一个<html>元素,且它一定是该文档的根元素。借助这个只读属性,能方便地获取到任意文档的根元素。参考文档html中document.body与document.d

    2022年7月19日
    24
  • JVM初探(一):jvm内存结构[通俗易懂]

    JVM初探(一):jvm内存结构[通俗易懂]一、概述我们知道java代码先编译为.class文件,然后再将.class文件交由jvm执行。在程序运行的这一过程中,jvm会将其管理的内存空间划分为不同的区域,这些区域各有各的用途,我们将其分为五

    2022年8月16日
    3
  • EntityFramework经典的left join语法

    EntityFramework经典的left join语法

    2022年1月26日
    43
  • javastream流详解_Java获取文件流的所有方式

    javastream流详解_Java获取文件流的所有方式一、Stream流引入Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库既有的鼻端。(Lambda表达式详解在上篇博客内容)现有一个需求:将list集合中姓张的元素过滤到一个新的集合中然后将过滤出来的姓张的元素中,再过滤出来长度为3的元素,存储到一个新的集合中1.用常规方法解决需求/…

    2022年10月6日
    0
  • 传统波束形成的算法实现「建议收藏」

    传统波束形成的算法实现「建议收藏」最近学习了传统波束形成(CBF)的原理,尝试着写出识别一个单声源的波束形成程序。下面按照程序说明一下。1、初始化设置一些常数,例如抽样频率,所要计算的频率,时间步等。clearall;closeall;clc;%—————-初始化—————-%c=1500;%声速cfs=10000;%抽样频率fsT=0.1…

    2022年6月29日
    20
  • linux解压zip文件,

    linux解压zip文件,一,linux解压zip文件,命令:unzip如果没有该命令,可先安装,命令为:yum-yinstallunzip

    2022年5月24日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号