直接上代码

    class Program
{
static readonly ConcurrentDictionary<string, Person> Dic = new ConcurrentDictionary<string, Person>();
static void Main(string[] args)
{
for (int i = ; i < ; i++)
{
Task.Run(() => { GetPerson("wjire"); });
}
Console.ReadKey();
}
private static Person GetPerson(string key)
{
return Dic.GetOrAdd(key, k => new Person());
}
} class Person
{
public Person()
{
Console.WriteLine("new Person()");
}
}

输出:

WHAT FUCK!

哪位大佬能出来解释下么?有点懵逼啊!

难道有些方法是线程安全的,有些方法不是?

想了下,好像也不能说不是线程安全,我感觉虽然创建了4个对象,但是后面3次创建时,key 还不存在,当委托执行完毕,也就是对象创建完成,准备添加的时候,

发现 key 已经存在了,于是终止了添加操作,而是把已经存在的值取出来返给调用者.

感觉应该是这样.

我怎么感觉 ConcurrentDictionary<,> 不是线程安全的喃?的更多相关文章

  1. Throughput Controller(吞吐量控制器) 感觉就像个线程控制器来的

    Percent Executions  下的 Throghput 意思是跑总线程的百分之多少. 如 10线程循环一次, Throghput 设置为80,则有8个线程会跑这个请求 Total Execu ...

  2. C#字典 Dictionary<Tkey,Tvalue> 之线程安全问题 ConcurrentDictionary<Tkey,Tvalue> 多线程字典

    ConcurrentDictionary<Tkey,Tvalue>  Model #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutra ...

  3. Android线程处理之Handler

    上一篇已经简单为大家介绍了一下关于Handler的使用,本篇我们就一起再来探讨一下Handler的高级使用,上一篇我们仅仅是简单的进行UI界面的更新,本篇我们来一起探讨一下如何把子线程的数据发送到主线 ...

  4. 【转】Linux系统进程的知识总结,进程与线程之间的纠葛

    我们先打个比方,多线程是十字路口多线程是平面交通系统,造价低,但是红绿灯多,老堵车,而多进程是则是立交桥,虽然造价高,上下坡多耗油,但是不堵车.这是一个抽象的概念.相信大家看完会有这种感觉. 进程和线 ...

  5. Java编程的逻辑 (65) - 线程的基本概念

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  6. CLR via C# 读书笔记-26.线程基础

    前言 这俩个月没怎么写文章做记录分享,一直在忙项目上线的事情,但是学习这件事情,停下来就感觉难受,clr线程这章也是反复看了好多遍,书读百遍其义自见,今天我们来聊下线程基础 1.进程是什么,以及线程起 ...

  7. 关于线程安全Dictionary

      使用Dictionary时, 是线程不安全的(). 会出现以下的问题, 导致IIS挂掉: 其实DicMapper是不为NUL的, DicMapper["aaasdfasdfasdfzxc ...

  8. 深入理解java线程池—ThreadPoolExecutor

    几句闲扯:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,也就有了后来学习ThreadPoolExecutor源码.学习源码的过程中,最恶心的其实就是几种 ...

  9. LINUX操作系统知识:进程与线程详解

    当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我们大家常用的单CPU ...

随机推荐

  1. 2018-2-13-WPF-DelegateCommand-出现Specified-cast-is-not-valid

    title author date CreateTime categories WPF DelegateCommand 出现Specified cast is not valid lindexi 20 ...

  2. html input onfocus

    <input type="text" value="请输入内容" onfocus="javascript:if(this.value=='请输入 ...

  3. tf.train.string_input_producer()

    处理从文件中读数据 官方说明 简单使用 示例中读取的是csv文件,如果要读tfrecord的文件,需要换成 tf.TFRecordReader import tensorflow as tf file ...

  4. vue中动态class写法

    <div class="wrap" :class="{active:index==current}"></div> <div cl ...

  5. H3C查看系统启动配置文件

  6. Oracle如何分组排序并产生序号

    SELECT C.ORG_SHORTNAME, B.USER_NAME, ROW_NUMBER () OVER ( PARTITION BY B.ORG_ID ORDER BY A.TOTAL_SCO ...

  7. Channel 9视频整理【5】

    Jennifer Chiu https://channel9.msdn.com/Niners/JenniferChiu

  8. spring boot 实践总结(转)

    pring Boot是最流行的用于开发微服务的Java框架.在本文主要分享的是在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于个人经验和一些熟知的Spring Boot专家的文章 ...

  9. 010.MFC_Progress

    一.建立名为processCtrl的MFC工程,添加Progress Control 和 button控件.修改button Caption属性为start,ID属性为IDC_BTN_START 为进 ...

  10. Visio流程图表

    基本流程图: 流程图类别 基本流程图的四种类型 打开基本流程图 注意页面内引用跟跨页引用 就是两个按钮的作用 就是一个按钮的作用 点击跳转 按钮设置好之后可以输入数字 方便区分跳转 下面是跨职能流程图 ...