zoukankan      html  css  js  c++  java
  • 乱七八糟 多线程

    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();
            }
        }
    }
  • 相关阅读:
    激活OFFICE2010时,提示choice.exe不是有效的win32程序
    Redis 学习之持久化机制、发布订阅、虚拟内存
    Redis 学习之事务处理
    Redis 学习之主从复制
    Redis 学习之常用命令及安全机制
    Redis 学习之数据类型
    Redis 学习之简介及安装
    Tomcat 虚拟主机配置
    mysql学习之权限管理
    mysql学习之主从复制
  • 原文地址:https://www.cnblogs.com/rhythmK/p/2530447.html
Copyright © 2011-2022 走看看