多线程的并发问题,lock用法
2024-10-14 15:42:42
开启多个线程,每个线程中多次操作公共变量
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace TestLock
{
class Program
{
static void Main(string[] args)
{ Test1(); } public static void Test1()
{
Thread[] threads = new Thread[]; //开启10个线程 Animal a = new Animal();
for (int i = ; i < ; i++)
{
Thread t = new Thread(a.Add1); //10 个线程同时执行方法 Add1 threads[i] = t;
}
for (int i = ; i < ; i++)
{
threads[i].Start(); //启动线程
} Console.ReadLine();
} } public class Animal
{
int balance = ;
private object obj = new object();
public void Add1()
{
for (int i = ; i < ; i++) //每个线程执行1000次Withdraw1方法
{
Withdraw1(new Random().Next(, ));
}
}
public void Withdraw1(int a)
{
if (balance < )
{ throw new Exception("为负了"); } //不加锁,就会抛出该异常,加锁后不会抛出
//lock (obj)
//{
if (balance >= a)
{
Console.WriteLine("before"+balance);
Console.WriteLine("减去"+a);
balance = balance - a; //多线程情况下,此处balance 会被其他线程修改,造成负值
Console.WriteLine("剩余" + balance);
}
//} } } }
最新文章
- mysql 5.7 docker 主从复制架构搭建
- [转载]El Capitan 中 SIP 介绍
- 关于Fragment你所需知道的一切!
- [z]查找锁表并解锁
- 把页面上的图表导出为pdf文件,分享一种请求下载文件的方法
- 如何实现Qlikview的增量数据加载
- session的方法
- 没有Path的Binding
- mac ulimit
- hadoop错误org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for
- U盘安装centos 6.4教程(总算是弄好了
- Laravel-路由-控制器
- NYoj-街区最短路径问题
- 深度神经网络(DNN)损失函数和激活函数的选择
- Linux(CentOS6.5)下编译安装MySQL Community Server 5.7.12
- 【mac】mac os X更新High Sierra后出现的问题
- 【数据结构】 字符串&;KMP子串匹配算法
- String.format()的使用
- jQuery之遍历索引相关方法
- WebSocket实现一个聊天室