• Task.Factory.StartNew和Queue应用


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace 处理队列文档
    {
        class Program
        {
            static void Main(string[] args)
            {
                documentManager dm = new documentManager();
                ProcessDocument.start(dm);
                for (int i =0;i<100;i++)
                {
                    dm.AddDocument(new Document("title" + i, "content"));
                }
                Console.ReadKey();
            }
        }
        class Document
        {
            public string title { get; set; }
            public string content { get; private set; }
            public Document(string title ,string content)
            {
                this.title = title;
                this.content = content;
            }
        }
        class documentManager
        {
            private Queue<Document> que = new Queue<Document>();
            public void AddDocument(Document doc )
            {
                lock(this)
                {
                    que.Enqueue(doc);
                    Console.WriteLine("新增的doc.tile" + doc.title);
                }
            }
            public Document GetDocument()
            {
                Document doc = null;
                lock (this)
                {
                    doc = que.Dequeue();
                }
                return doc;
            }
            public bool isDocumentAvailable => que.Count > 1;
           
        }
        class ProcessDocument
        {
            private documentManager dm ;
            protected ProcessDocument(documentManager dm)
            {
                if(dm == null)
                {
                    throw new ArgumentNullException();
                }
                this.dm = dm;
            }
            public void run()
            {
                if(dm.isDocumentAvailable)
                {
                    while (true)
                    {
                        Console.WriteLine("tile:" + dm.GetDocument().title);
                        Thread.Sleep(new Random().Next(20));
                    }
                }
            }
            public static void start(documentManager dm)
            {
                Task.Factory.StartNew(new ProcessDocument(dm).run);
            }
        }
    }
  • 相关阅读:
    sss
    sss
    maven tomcat jstl 异常
    第1章 预备知识
    第2章 存储管理
    第8章 虚拟机字节码执行引擎
    第23章 Spring MVC初体验
    第1章 预备知识
    第5章 Java中的锁
    第13章 线程安全与锁优化
  • 原文地址:https://www.cnblogs.com/ilrc/p/15811868.html
Copyright © 2020-2023  润新知