开启多个线程,每个线程中多次操作公共变量

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);
}
//} } } }

最新文章

  1. mysql 5.7 docker 主从复制架构搭建
  2. [转载]El Capitan 中 SIP 介绍
  3. 关于Fragment你所需知道的一切!
  4. [z]查找锁表并解锁
  5. 把页面上的图表导出为pdf文件,分享一种请求下载文件的方法
  6. 如何实现Qlikview的增量数据加载
  7. session的方法
  8. 没有Path的Binding
  9. mac ulimit
  10. hadoop错误org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for
  11. U盘安装centos 6.4教程(总算是弄好了
  12. Laravel-路由-控制器
  13. NYoj-街区最短路径问题
  14. 深度神经网络(DNN)损失函数和激活函数的选择
  15. Linux(CentOS6.5)下编译安装MySQL Community Server 5.7.12
  16. 【mac】mac os X更新High Sierra后出现的问题
  17. 【数据结构】 字符串&amp;KMP子串匹配算法
  18. String.format()的使用
  19. jQuery之遍历索引相关方法
  20. WebSocket实现一个聊天室

热门文章

  1. 当使用System,out.println()打印一个对象是自动调用toString方法
  2. 4D(DRG、DLG、DOM、DEM)数据 概念
  3. 转:LR性能测试结果样例分析 测试结果分析
  4. C++中运行外部程序
  5. dfs和bfs的简单总结
  6. JQuery中一个简单的表单验证的实例
  7. stock 财务 指标
  8. activity管理类 appManager
  9. Redis hash 类型及操作
  10. logo集锦