currentmap的get是线程安全吗

作者&投稿:祝玛 (若有异议请与网页底部的电邮联系)
~ 是。根据查询CSDN博客网显示。
1、简单的进行put或者get等之类的操作是线程安全的,具体实现和concurrenthashmap的版本有关,1.7使用的分段锁机制去实现的,1.8之后采用的是cas加synchronized加红黑树实现,1.8之后并行度不会局限于segment的大小。虽然集合本身是线程安全的,但是组合起来还是有问题,这个问题也就是竞态条件,竞态条件指的是程序的执行结果依赖于线程的执行顺序。
2、concurrenthashmap的get和set操作是线程安全的,但是我假设获取到集合中的值再进行加1操作,mapsetgetkey加1:这个操作就是线程不安全的,假设此时两个线程去get这个key,get出来的值是相同的,然后进行加1,再set到集合中,得到的结果肯定是对原来的值只增加了1,而不是我们认为的2,但是如果一个线程执行完mapsetgetkey加1:另一个线程再去执行这个操作,那么得到的结果便是我们想要的结果。也就是说这个结果依赖于线程的执行顺序。因此在线程安全的方法中进行组合操作要考虑竞态问题。为了能够保证线程安全,也需要进行加锁操作。


ConurrentHashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改...

西丰县17690168685: java中ConcurrentHashMap是线程安全的,我这样写有什么问题吗? -
彩帖富马: 这样使用是有问题的.ConcurrentMap能够保证每一次调用(例如一次putIfAbsent)都是原子操作,不受多线程影响,但并不保证多次调用之间也是原子操作.以上实现的GetKeyBM方法中,ConcurrentMap的方法被调用了许多次,不同线程之...

西丰县17690168685: JAVA中线程安全的map有哪些? -
彩帖富马: JAVA中线程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap.java中map中线程安全怎么实现:1. 同步的map就是Hashtable, concurrenthashmap.2. 你看到的Hashtable就是直接在hashmap上加了个锁,concurrenthashmap...

西丰县17690168685: c#中Thread.CurrentThread.GetHashCode()得到的数字相当于就是线程 -
彩帖富马: GetHashCode方法集成于object类,线程ID应该有一个ThreadID这个属性,GetHashCode也可以作为表示,这个方法在用于在tolookup()和hashtable中快速查找时使用

西丰县17690168685: Java:ThreadLocal究竟有什么用呢?费解 -
彩帖富马: 从如下8点来讲解一下:1.ThreadLocal用来解决多线程程序的并发问题2.ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都 可...

西丰县17690168685: ThreadLocal 是如何创建变量副本的 -
彩帖富马: ThreadLocal没有复制变量.大致原理:它只是把当前变量放到一个HashMap中,其中的key是当前的thread,value是你当前的对象.

西丰县17690168685: JAVA中这个Thread.currentThread是什么意思 -
彩帖富马: java 里的Thread.currentThread是指当前的执行线程,如代码所示:public class Program { public static void main(String[] args) { Task task=new Task(); Thread thread_1=new Thread(task); Thread thread_2=new Thread(task); thread_1.start(); ...

西丰县17690168685: concurrenthashmap是怎么实现线程安全的 -
彩帖富马: 在ConcurrentHashMap没有出现以前,jdk使用hashtable来实现线程安全,但是hashtable是将整个hash表锁住,所以效率很低下.ConcurrentHashMap将数据分别放到多个Segment中,默认16个,每一个Segment中又包含了多个HashEntry列表...

西丰县17690168685: ThreadLocal的使用方法 -
彩帖富马: 早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择.使用这个工具类可以很简洁地编写出优美的多线程程序,虽然ThreadLocal非常有用,但是似乎现在了解它、...

西丰县17690168685: Android 可以通过子线程直接更新的控件有哪些,UI线程与主线程真是一个神奇的东西,求高手~~ -
彩帖富马: 先给你提示一下.android中更新UI只能用UI线程,即主线程. 这样说吧 ui线程== 主线程.1 想要在子线程中数据发生改变更新主线程的ui,可以通过消息机制,message和handler结合的方式,比较好用. 2 还可以 用特定的控件的方法,比如ListView的adapter中的notifydatachang().好像是这个方法 3 在view中还可以在数据变化后用invalidata()或者postInvalidata()这两个方法.基本上就这几种常见的,希望可以帮你,大家都来讨论.

西丰县17690168685: java中list里面存放map,根据map中的某两个个字段进行排序 -
彩帖富马: 用Collections.sort(List list, Comparator c) 实现一个Comparator即可 public class MyComparator implements Comparator { public int compare(Object o1, Object o2) { Map m1=(Map)o1, m2=(Map)o2; //从m1与m2取字段值然后比较,大于返回1,等于返回0,小于返回-1 } public boolean equals(Object o) { //同上面类似 }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网