线程练习-吃馍馍
Posted lunawzh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程练习-吃馍馍相关的知识,希望对你有一定的参考价值。
学习线程,处理共享资源,要保证每个线程对资源是安全的,这里模拟一个吃馍馍的例子,用一个线程作生产者单独生成镆镆,再随机生成几个线程来模拟消费者吃馍馍,生产的馍馍为0后其消费者无法再吃到馍馍,只能等生产者生产馍馍。
static Mutex m = new Mutex(); static void Main(string[] args) { momo = new Momo(); CreateMomo(); for (int j = 0; j < new Random().Next(3); j++) { while (true) { Consume(); Thread.Sleep(1000); } } } static Momo momo = null; static int i = 0; public async static void CreateMomo() { await Task.Run(async () => { while (true) { await Task.Delay(new Random().Next(2000)); m.WaitOne(); //生产Momo momo.list.Add(new Momo(++i)); Console.WriteLine("生产一个MOmo,共有Momo:" + momo.Count); m.ReleaseMutex(); } }); } public async static void Consume() { await Task.Run(async () => { await Task.Delay(new Random().Next(20000)); m.WaitOne(); if (momo.Count <= 0) { Console.WriteLine("无Momo," + Thread.CurrentThread.ManagedThreadId + "没吃着"); m.ReleaseMutex(); return; } momo.list.RemoveAt(0); Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "吃了一个,还剩" + momo.Count); m.ReleaseMutex(); }); }
以上是关于线程练习-吃馍馍的主要内容,如果未能解决你的问题,请参考以下文章
newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段