首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么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

    2.2K30

    为什么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 (空) 值的解答。

    2.6K10

    【Linux】进程间通信:system V共享内存

    ,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据 这里,OS为进程开辟内存空间 前面提到过,动态库首先从磁盘加载到物理内存,再通过页表映射到地址空间的共享区,那么这段内存也可以 那么操作系统开辟的内存经过页表映射到进程的地址空间...• 创建:由第一个调用 shmget 的进程创建。...共享内存不随着进程的退出而释放,所有权属于操作系统,所以需要我们手动释放,生命周期随内核 IPC指令 这里删除只能用shmid来删除 key属于用户形成,内核使用的一个字段,用户不能使用key来进行shm...(2) ShmGet • 功能:创建或获取共享内存段。 • 使用 shmget 函数,根据 key、size 和 flag 创建或获取共享内存段。 • 如果失败,打印错误信息。...公式:shmaddr - (shmaddr % SHMLBA) shmflg=SHM_RDONLY,表示连接操作用来只读共享内存 void *AttachShm() { void * shmaddr

    42410

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

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

    2.3K10
    领券