首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么ConcurrentHashMap不允许插入null值?

    在 Java 语言中,ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插入 null 值的,而 HashMap 又允许 key 或 value...探索最终原因 通过上面源码分析,我们似乎已经找到了 ConcurrentHashMap 不允许插入 null 值的原因,用一句话概括就是:乌龟的屁股“规定”!...然而,这个原因是不能说服面试官的,虽然源码是这样设计的,但我们要思考的是,这样设计背后更深层次的原因,为什么 ConcurrentHashMap 不允许插入 null?...ConcurrentHashMap 设计者的回答 对于 ConcurrentHashMap 不允许插入 null 值的问题,有人问过 ConcurrentHashMap 的作者 Doug Lea,以下是他回复的邮件内容...总结 在 Java 语言中,HashMap 这种单线程下使用的集合是可以设置 null 值的,而并发集合如 ConcurrentHashMap 或 Hashtable 是不允许给 key 或 value

    1.9K30

    为什么ConcurrentHashMap不允许插入null值?

    在Java语言中,给ConcurrentHashMap和Hashtable这些线程安全的集合中的Key或者Value插入 null(空) 值的会报空指针异常,但是单线程操作的HashMap又允许...那到底为什么ConcurrentHashMap不允许插入 null (空)值,HashMap又允许插入呢? 2、歧义问题 因为给ConcurrentHashMap中插入 null (空)值会存在歧义。...也就是说,产生的歧义不能被 证 伪, 3、作者回复 对于 ConcurrentHashMap 不允许插入 null 值的问题,有人问过 ConcurrentHashMap 的作者 Doug Lea,...4、总结 ConcurrentHashMap在源码中加入不允许插入 null (空) 值的设计,主要目的是为了防止并发场景下的歧义问题。...以上就是我对关于ConcurrentHashMap为什么不允许插入 null (空) 值的解答。

    2K10

    【Linux】进程间通信——共享内存

    、修改权限等) 3.1.shmget() shmget表示获取共享内存,第一个参数key表示共享内存的键值,用于标识唯一的共享内存段。...用下面简图表示挂接: shmget的第一个参数shmid表示shmget的返回值,会返回一个shmid,第二个参数表示我们可以指定一个虚拟地址,挂接到指定的虚拟地址上,但是一般情况下我们都会默认使用分配的虚拟地址....shmctl 这个函数是用于控制共享内存的,在命令行我们一般用ipcrm -m shmid这个命令来删除共享内存,但是在代码层面,我们一般用shmctl这个函数来控制共享内存,可以进行删除修改权限等操作...第二个参数表示标志位进行什么操作,下面是可以进行的操作,红框框起来的,表示删除共享内存,我们可以用这个宏来实现删除共享内存。...通过 shmget、shmat、shmctl 等函数,Linux 系统为我们提供了灵活的共享内存操作接口。

    9410

    进程间通信学习小结(共享内存)

    所有这一切都是系统调用shmget完成的。...shmat()把 共享内存区域映射到调用进程的地址空间中去,这样,进程就可以方便地对共享区域进行访问操作。shmdt()调用用来解除进程对共享内存区域的映射。...shmctl实现对共享内存区域的控制操作。 三:实例 两个进程通过系统V共享内存通信的范例。...2、 系统V共享内存是随内核持续的,即使所有访问共享内存的进程都已经正常终止,共享内存区仍 然存在(除非显式删除共享内存),在内核重新引导之前,对该共享内存区域的任何改写操作都将 一直保留。...char *shmaddr是共享内存的起始地址 int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。

    89920
    领券