单例模式-多线程单例模式

using System;
using System.Threading;


namespace Rattan.ERP.TMS.Services.EOP
{
  /// <summary>
  /// 单线程队列,创建 EOP 订单
  /// </summary>
  public class ThreadCreateEopOrder
  {
    #region 单例模式
    private ThreadCreateEopOrder()
    {
    }
    /// <summary>
    /// 线程安全锁
    /// </summary>
    private static readonly object m_lock = new object();
    private volatile static ThreadCreateEopOrder m_instance = null;
    /// <summary>
    /// 实例化 ThreadCreateEopOrder 对象
    /// </summary>
    /// <returns></returns>
    public static ThreadCreateEopOrder CreateInstance()
    {
      if (m_instance == null)
      {
        lock (m_lock)
        {
          if (m_instance == null)
            m_instance = new ThreadCreateEopOrder();
        }
      }
      return m_instance;
    }
    #endregion


    #region 枚举
    /// <summary>
    /// 枚举
    /// </summary>
    public enum EnumState
    {
      /// <summary>
      /// 未开始
      /// </summary>
      None = 0,   
      /// <summary>
      /// 开始
      /// </summary>
      Start = 1,   
      /// <summary>
      /// 正在执行
      /// </summary>
      Doing = 2,   
      /// <summary>
      /// 执行完毕
      /// </summary>
      End = 3,    
    }


    private volatile static EnumState m_state = EnumState.None;
    /// <summary>
    /// 执行状态
    /// </summary>    
    public static EnumState State
    {
      get { return m_state; }
      //set { m_State = value; }
    }
    #endregion


    /// <summary>
    /// 线程
    /// </summary>
    private Thread m_thread = null;


    /// <summary>
    /// 开启一个进程
    /// </summary>
    public void RunWork()
    {
      //确保临界区被一个Thread所占用 
      lock (m_lock)
      {
        if (State == EnumState.None || State == EnumState.End)
        {
          //初始化线程
          m_thread = new Thread(new ThreadStart(DoWork))
          {
            Name = "创建 EOP 订单线程"
          };
          m_thread.Start();
          //WorkFromDate = DateTime.Now;
          m_state = EnumState.Start;
        }
      }
    }


    /// <summary>
    /// 处理消息队列中的数据
    /// </summary>
    private void DoWork()
    {
      try
      {
        m_state = EnumState.Doing;
#region 需要执行的主要程序代码
        CreateEopOrder eopOrder = new CreateEopOrder();
        eopOrder.Start();
#endregion
      }
      catch (Exception ex)
      {
        Grass.Log.ExceptionsStack.RegisterError(ex);
      }
      finally
      {
        m_state = EnumState.End;
      }
    }


  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值