C#多线程操作----处理并发的问题,Lock关键字
主程序Program.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace MultiThreadedPrinting
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("********Synchronizing Threads*************");
Printer p = new Printer();
Thread[] threads = new Thread[10];
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(new ThreadStart(p.PrintNumber));
threads[i].Name = string.Format("Worker thread #{0}", i);
}
foreach (Thread t in threads)
t.Start();
Console.ReadLine();
}
}
}
类Printer.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace MultiThreadedPrinting
{
public class Printer
{
public void PrintNumber()
{
Console.WriteLine("-> {0} is executing PrintNumbers()", Thread.CurrentThread.Name);
for (int i = 0; i < 10; i++)
{
Random r = new Random();
Thread.Sleep(1000 * r.Next(5));
Console.Write(i + ",");
}
Console.WriteLine();
}
}
}
运行程序你会发现出现意想不到的结果,一些线程可能被挂起,出现了并发的问题。
为了解决并发问题C#提供了特别的关键字:Lock
PrintNumber()
中修改为
lock (this)
{
Console.WriteLine("-> {0} is executing PrintNumbers()", Thread.CurrentThread.Name);
for (int i = 0; i < 10; i++)
{
Random r = new Random();
Thread.Sleep(1000 * r.Next(5));
Console.Write(i + ",");
}
Console.WriteLine();
}
转载于:https://www.cnblogs.com/aaa6818162/archive/2009/08/20/1550464.html
C#多线程操作----处理并发的问题,Lock关键字相关推荐
- 更高效地提高redis client多线程操作的并发吞吐设计
Redis是一个非常高效的基于内存的NOSQL数据库,它提供非常高效的数据读写效能.在实际应用中往往是带宽和CLIENT库读写损耗过高导致无法更好地发挥出Redis更出色的能力.下面结合一些redis ...
- 高效Redis Client多线程操作的并发吞吐设计
Redis是一个非常高效的基于内存的NOSQL数据库,它提供非常高效的数据读写效能.在实际应用中往往是带宽和CLIENT库读写损耗过高导致无法更好地发挥出Redis更出色的能力.下面结合一些redis ...
- Java多线程、高并发秒杀时MySQL出现死锁原因(Deadlock found when trying to get lock)及对应解决方案
1. 死锁背景 1.1 在做高并发秒杀中创建订单.减库存步骤时出现异常:MySQLTransactionRollbackException: Deadlock found when trying to ...
- 多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
"线程同步"的含义 当一个进程启动了多个线程时,如果需要控制这些线程的推进顺序(比如A线程必须等待B和C线程执行完毕之后才能继续执行),则称这些线程需要进行"线程同步(t ...
- python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作
1.paramiko概述 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以 ...
- 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)
多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- Java多线程:线程间通信之Lock
Java 5 之后,Java在内置关键字sychronized的基础上又增加了一个新的处理锁的方式,Lock类. 由于在Java线程间通信:volatile与sychronized中,我们已经详细的了 ...
- java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...
前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...
最新文章
- 1024 | 不加班,带你们一起薅当当的羊毛!
- SAP WM初阶事务代码LX29 - List of Fixed Storage Bins
- Ext.data.GroupingStore
- 栏目信息开源 免费 java CMS - FreeCMS1.3 标签 infoList
- Android踩坑日记:自定义水平和圆形ProgressBar样式
- ThreadLocal的第二种用法 part1
- Linux高性能服务器编程
- android novate乱码,Novate 一款Android RxStyle的网络框架
- 基于jmx监控kafka_0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用
- JS正则验证邮箱的格式
- 黑苹果hidp显示不清楚_魔兽世界9.0:盟约指挥台不显示胜率?搞清楚机制,轻松收菜!...
- python入门_老男孩_数据类型简介_int/bool/str转换_字符串索引和切片_字符串操作_day3...
- Java类与对象——几个课堂例子的总结及作业
- Google Chrome浏览器模拟设置不同分辨率
- springboot悠悠转二手网站毕业设计源码181134
- 使用Scrapy框架爬取网页并保存到Mysql
- 如何打造一个自动化的前端项目
- 国内外银行核心系统之间的差异
- 一个逻辑问题的分析:“天堂与地狱的守卫”
- 解决you-get下载视频速度慢和下载MP4文件问题