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)
上一篇 2022年7月18日 下午3:16
下一篇 2022年7月18日 下午3:16


相关推荐

  • pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程

    pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程Pycharm 设置默认头的图文教程 1 设置的路径是 File gt settings gt Editor gt FileandCodeT gt PythonScript 内容见图 这样新建文件的时候就会默认头如下 这里说明下 usr bin evnpython 和 usr bin python 的区别 第一种写法是在 PC 的 Path 中找寻第一个 python

    2026年3月17日
    1
  • Netty实战《原理》

    Netty实战《原理》Netty 介绍官网说明官网说明 1 netty 是由 JBOSS 提供的一个 java 开源框架 Netty 提供异步的 基于事件驱动的网络应用程序框架 用于快速开发高性能 高可靠的网络 IO 程序 2 netty 可以帮助你快速 简单的开发一个网络应用 相当于简化和流程化 NIO 的开发流程 3 netty 目前最流行的 NIO 框架 在互联网 大数据分布式计算领域 游戏行业 通信行业等有广泛的应用 知名的 Es Dubbo 等框架内部都采用 nettyc 官网说明

    2025年7月17日
    5
  • 阅读软件怎么添加书源_使用OneDrive给文献管理和阅读软件知之阅读添加云同步功能…「建议收藏」

    阅读软件怎么添加书源_使用OneDrive给文献管理和阅读软件知之阅读添加云同步功能…「建议收藏」“最近发现一款不错的文献管理和阅读软件——知之阅读点击文章末尾查看原文即可打开软件的官方主页”目前,知之阅读的最新版本是在2019年10月15日发布的V1.5.0.7版,虽有近一年没有更新过了但在功能方面已经没有什么大的缺失,对于基本的文献阅读和管理已经够用,软件中也存在不少亮点功能可以在使用中慢慢感受;对于需要在多设备上切换阅读的用户(我)来讲,知之阅读存在的最主要问题就是没有云同步功…

    2022年6月21日
    46
  • 平面解析几何又一题

    平面解析几何又一题问题来自网络的一道题 如图绿色部分 AOB DeltaAOB 是等腰直角三角形 O 0 0 O 0 0 为坐标原点 A 4 0 A 4 0 B 0 4 B 0 4 MM 是 ABAB 中点 EE 在 xx 轴正半轴上 FF 在线段 OBOB 上 EMF 45o angleEMF 45 rm o 求使得 OF EF 6OF EF 6 的 E x 0 E x 0 点

    2026年3月17日
    2
  • 图像风格迁移_图像风格迁移算法

    图像风格迁移_图像风格迁移算法风格迁移指的是两个不同域中图像的转换,具体来说就是提供一张风格图像,将任意一张图像转化为这个风格,并尽可能保留原图像的内容

    2025年8月25日
    6
  • 大模型教程

    大模型教程

    2026年3月12日
    3

发表回复

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

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