zoukankan      html  css  js  c++  java
  • 多线程之搬运货物1:分堆搬

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

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> productList = new List<string>() {"AAAA","BBBB","CCCC","DDDD","EEEE" };//货物
                MoveHelper moveHelper = new MoveHelper();

                //两个人或多个人时
                int personCount = 6;
                Dictionary<string, List<string>> person_Product = new Dictionary<string, List<string>>();//人与货物的对应表
                
    //给人分配任务
                while (productList.Count > 0)
                {
                    for (int i = 0; i < personCount; i++)
                    {
                        if (productList.Count <= 0break;
                        string key = "P" + (i+1).ToString();
                        List<string> plist=new List<string>();
                        if (!person_Product.Keys.Contains(key))
                            person_Product.Add(key, plist);
                        else plist = person_Product[key];
                        plist.Add(productList[0]);
                        productList.RemoveAt(0);
                    }
                }
                //有多个人就创建多个个线程
                foreach (string str in person_Product.Keys)
                {
                    Thread thread = new Thread(new ParameterizedThreadStart(moveHelper.MoveThings));
                    MoveParameters ps = new MoveParameters(str, person_Product[str]);
                    thread.Start(ps);
                    //thread.Join();//当加上join后,所用时间是单线程的时间。并不会少时间。
                }

                Console.WriteLine("ddddddddddddddddddddddddddddddddddd");
                Console.ReadLine();
            }
        }

        public class MoveHelper
        {
            public void MoveThings(object product)
            {
                MoveParameters ps = product as MoveParameters;

                if (ps.Products != null && ps.Products.Count > 0)
                {
                    foreach (string pro in ps.Products)
                    {
                        System.Threading.Thread.Sleep(1000);
                        Console.WriteLine("货物" + pro + "已经被" + ps.PersonName + "成功送达目的地!" + System.DateTime.Now.ToString());//YYYY-MM-DD HH-MM-mm
                    }
                }
            }
        }

        public class MoveParameters
        {
            public string PersonName { getset; }
            public List<string> Products { getset; }

            public MoveParameters() { }

            public MoveParameters(string personName, List<string> products)
            {
                this.PersonName = personName;
                this.Products = products;
            }
        }
    }
  • 相关阅读:
    Simple Automated Backups for MongoDB Replica Sets
    [转] matlab获取时间日期
    Matlab与C++混合编程 编写独立外部应用程序时出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误
    Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作
    [转] Matlab与C++混合编程(依赖OpenCV)
    OpenCV 64位时 应用程序无法正常启动0x000007b 问题解决
    LinkedBlockingQueue多线程测试
    rdlc报告vs2008编辑正常,在vs2012在对错误的编辑
    SD3.0四个协议解读
    链队列
  • 原文地址:https://www.cnblogs.com/pnljs/p/3520934.html
Copyright © 2011-2022 走看看