• 乱七八糟 多线程


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;

    namespace ParallelComputing
    {
        public class MoreThread
        {
            private class ManualResetEventObj
            {
                public ManualResetEvent resetEvent
                {
                    get;
                    set;
                }

                public Object obj
                {
                    get;
                    set;
                }
            }

            private List<int> list;
            ManualResetEvent auto;
            long doneCount = 0;

            public MoreThread()
            {
                list = new List<int>();
            }

            public void Run()
            {
                Stack<int> stack = new Stack<int>();
                for (int i = 0; i < 60; i++)
                {
                    stack.Push(i);
                }
                int temp = stack.Count;
                Console.WriteLine(temp);
                ManualResetEvent[] _manualResetEvents = new ManualResetEvent[temp];
                for (int i = 0; i < temp; i++)
                {
                    Console.WriteLine("The Current Namber is {0}" + i);
                    _manualResetEvents[i] = new ManualResetEvent(false);
                    ThreadPool.QueueUserWorkItem(new WaitCallback(Star), (Object)new ManualResetEventObj()
                    {
                        obj = i,
                        resetEvent = _manualResetEvents[i]
                    });
                }
                WaitHandle.WaitAll(_manualResetEvents);
                Console.WriteLine("执行完成!");
            }

            private void Star(Object obj)
            {
                ManualResetEventObj e = obj as ManualResetEventObj;
                int i = Convert.ToInt32(e.obj);
                Monitor.Enter(obj);
                Thread thread = Thread.CurrentThread;
                System.Threading.Thread.Sleep(10);
                Console.WriteLine(i);
                list.Add(Convert.ToInt32(i));
                if (!thread.Equals(Thread.CurrentThread))
                    throw new Exception("线程异常");
                Monitor.Exit(obj);
                e.resetEvent.Set();
            }
        }
    }
  • 相关阅读:
    Eygle力荐:Oracle 19c升级文档、视频、问答集锦
    每日一题 2020.05.11
    “前浪”数据仓库和大数据平台,到“后浪”数据中台的演变史
    面向对象例子
    super()调用父类方法
    iOS视图控制器初始化问题
    详解EBS接口开发之更新供应商付款方法
    oracle对大对象类型操作:blob,clob,nclob
    "ORA-20100: 为 FND_FILE 创建文件 o0003167.tmp 失败"
    错误 frm-40654 记录已经被另一个用户更新,重新查询以查看修改
  • 原文地址:https://www.cnblogs.com/rhythmK/p/2530447.html
Copyright © 2020-2023  润新知