java中是不是没做同步控制的对象都是线程不安全的???

突然想问,java中为什么Hashtable是线程安全的,而HashMap是线程不安全的?还有ArrayList为什么是线程不安全的,Vector是线程安全的??于是乎我就想是不是Hashtable、Vector内部实现中进行了同步控制。于是我就想,是不是没做同步控制的对象就不是线程不安全的??

0

2个回答

如果一个函数不访问成员函数,只访问局部变量和参数,那么它就不需要同步,也是线程安全的。(当然,这个函数内部不能调用线程不安全的其他函数)
这种函数是不变的(immutable),一个不变的函数,给定输入参数,返回值就给定了。比如说三角函数。
有的函数,它的返回值不但受到参数的影响,而且受到对象状态的影响,这种函数就需要同步。

0

String类是线程安全的,线程安全不安全是看有没有改变状态的变量。在开发中,service层一般都是线程安全的,因为所包含的变量Dao是安全的,
只有方法。若函数的变量是基本类型和string类型,则这个函数是安全的。函数中定义的对象,若没有返回出去也是线程安全的,因为它会放在方法
栈中。线程安全是一个难的知识点,建议看一下。关于ArrayList和HashMap不是线程安全的,可以百度一下看一下别人的解答。

0
lppzyt
lppzyt 回复wobushixiaobailian: 从大的角度说是这样的,还需要进行再细化,什么时候会共享。哪些情况不需要使用同步控制。同步代码块能否用原子操作的类去代替,等等。
8 个月之前 回复
wobushixiaobailian
我不是小白脸 意思是线程安不安全,要先看是在共享内存部分,还是私有内存部分。发生线程不安全,只会发生在共享内存部分。而对象是存在共享内存区的,如果没做同步控制,它就可能被多个线程同时访问,于是就是线程不安全的咯?
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
哪些集合对象线程是安全的,哪些是不安全的。
- 首先给出结论,ArrayList,LinkedList,HashMap,StringBuilder是不安全的。vector,HashTable,StringBuffer是线程安全的。下面用代码来看看。ArrayList测试npackage testThread;import java.util.ArrayList;nimport java.util.List;class Ticket imple
Java并发(6)--线程安全策略:不可变对象、ThreadLocal、常见的线程安全与线程不安全类、同步容器
为避免在并发环境下的线程不安全问题,可以将对象确保为不可变对象,或者也可以采用线程封闭技术。rn文章目录一. 不可变对象-线程安全二. 线程封闭实现线程安全1. 堆栈封闭:局部变量,无并发问题2. ThreadLocal三. 常见线程不安全类1. StringBuilder 与 StringBuffer2. ArrayList,HashSet,HashMap 等Collection类rn一. 不可变...
java中为什么Hashtable是线程安全的,而HashMap是线程不安全的?还有ArrayList为什么是线程不安全的,Vector是线程安全的??
什么叫做线程安全nHashMapnHashtablenCollections.synchronizedMap()
局部变量一定线程安全吗
局部变量, 如果是基本类型或是包装类型, 依然不能通过多线程改变其值, 如果是对象, 则其属性值是线程不安全的nndemo1:nnnpublic void compute(LocalDate date){nn //在切换租户时,只有当前线程的第一个租户id设置有效,或者说一个线程内无法切换数据源n TenantContext.set("saas_base");n ...
线程安全,为什么说ArrayList,LinkedList是线程不安全的,以及CopyOnWriteArrayList和vector为什么安全
概要介绍 n首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 如图,List接口下面有两个实现,一个是ArrayList,另外一个是vector。 从源码的角...
Java--辨别线程安全与线程不安全
在学习Java的时候经常会发现有很多名称相似的类,比如HashMap和Hashtable,StringBuffer和StringBuilder等等,他们的名称相似,功能也有相似的地方,所以初学者在学习之中往往会很疑惑,他们都有哪些不同呢?而在深入研究这个问题的时候,就会发现他们都有这样两个概念,线程安全和线程不安全,这也就是本文主要讲的内容。 n1.什么是线程安全和线程不安全呢? n n 假设A和...
类的静态变量是线程不安全的
多线程
Java 之 ConcurrentHashMap 的线程不安全行为
多线程中的线程安全的问题是 Java 进阶必须掌握的内容,也是互联网中经常面试的重点,在信息发达的今天使用多线程处理会显著提升效率,而线程安全是使用多线程时不出 Bug 的保障。n本场 Chat 首先会带领大家了解 Java 线程安全的几种方式,然后介绍几种线程安全的集合,最后介绍 ConcurrentHashMap 的线程不安全行为。n本场 Chat 您将学到如下内容:nn了解 Java 线程安...
为什么SimpleDateFormat不是线程安全的?
查看DateFormat的format(Date date)源码,我们可发现实现如下:/**n * 格式化日期n */npublic final String format(Date date) {n return format(date, new StringBuffer(),n DontCareFieldPosition.INSTANCE).toStrin
java单例模式并解决懒汉式下线程不安全的问题
单例模式中分为懒汉式和饿汉式nn其中,懒汉式是线程不安全的,当有多条线程同时访问单例对象时,则会出现多线程临界资源问题。n现在用多线程实现并解决线程安全问题nn饿汉式npublic class SigletonDemo01 {n static HashSet<King> hs = new HashSet<>();n static Runnable r...
【总结,持续更新】java常见的线程不安全,你以为的线程安全
多线程问题,主要是多线程执行时的顺序是随机的,无法保证同一代码的执行顺序,任意两步代码(非原子)操作都存在安全问题nn以下常见的线程安全问题:nn1. 锁在StringnnString str="a";nnsynchronized(str)nn{nnstr = "b"; //str变为一个新对象,锁失效,字符的赋值是新new一个String然后赋值的nn}nn2. i++,使用java.util...
单例模式多线程不安全,浅解析ThreadLocal类
nnnn1、单例模式下出现的安全问题nnnn先看下面小段代码,一个controller,一个service。nn controller.Java代码:n……..n@Autowiredn private XXXService xxxService;n……..n@RequestMapping(“/doXXX.do”)npublic void doXXX(){n …..n xxxServ...
线程安全与不安全的集合
Java集合框架体系nnnJava集合框架主要包括Collection和Map两种类型。其中Collection又有3种子类型,分别是List、Set、Queue。Map中存储的主要是键值对映射。n规则集Set中存储的是不重复的元素,线性表中存储可以包括重复元素,Queue队列描述的是先进后出的数据结构,可以用LinkedList来实现队列。n效率上,规则集比线性表更高效。nArrayList主要...
多线程的安全性,就是“线程安全问题都是由全局变量及静态变量引起的”
多线程的安全性,就是“线程安全问题都是由全局变量及静态变量引起的”。“线程安全问题都是由全局变量及静态变量引起的”,就这么简单。
java 中如何避免多线程不安全
在java应用中,我们时常要用到java中的多线程。如何实现一个正确的多线程。本文提供了指导。
java单例设计模式详解(懒汉饿汉式)+深入分析为什么懒汉式是线程不安全的+解决办法
对于java单例设计模式,一直想写一篇博客,但是关于java单例设计模式涉及的知识比较多,后面可能还要牵涉多线程问题,有一些知识我自己也一直没明白,就一直放呢没有写,现在我觉得大部分关于单例设计的知识包括多线程的知识我也明白了,于是今天就写出来分享给大家,如果文章里边有不恰当的地方还请大家留言指出,感激不尽。nn单例设计模式就是:运用单例模式设计的这个类在每次实例化的时候只能产生一个对象。比如A类...
Java的单例模式是不是线程安全的?
相对多例来说,很多人认为单例肯定是线程安全的。其实单例也不能保证100%线程安全的。解决方法就是创建实例方法中加入Java关键字synchronized。  Java语言的关键字synchronized,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个
java多线程-SimpleDateFormat不安全(九)
java多线程-SimpleDateFormat不安全(九)nn在平常的工作中,我们经常会用到SimpleDateFormat这个类来做日期转换,但是要注意它在多线程下面是不安全的。 n simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);nnnn不安全代码测试:nnnnnpackage cn.thread.first.unsafe;nnni...
java中同步synchronized的意义,如何用它解决线程不安全的问题
马克-to-win:从上节我们学到,当多个线程访问且更改同一个变量 时,很容易出现线程安全问题,诚然,我们可以通过一些其他手段,比如局部变量,多个实例,调整程序结构来解决线程安全问题,但是通常来讲,通过同步机制 synchronized来解决线程安全问题更加确定。比如,由于需求等其他限制条件决定,我们不能够用局部变量或多个实例或什么其他办法解决怎么办? synchronized为我们提供了比较确定...
Java之——SimpleDateFormat 线程不安全问题及解决方法
今天,给大家带来一篇Java SimpleDateFormat在多线程环境下不安全的文章,Java SimpleDateFormat 是线程不安全的,当在多线程环境下使用一个DateFormat的时候是有问题的,如下面的例子npackage com.lya.date;nimport java.text.SimpleDateFormat;nimport java.util.ArrayList;ni
为什么ArrayList线程不安全?不安全为什么要使用?如何解决线程不安全?
1、为什么ArrayList线程不安全?首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。如图,List接口下面有两个实现,一个是ArrayList,另外一个是...
ArrayList为什么是线程不安全的
模拟测试给list加入10000条数据,代码:nnpublic class UnsafeList {n public static void main(String[] args) {n // 进行 10次测试n for (int i = 0; i < 10; i++) {n test();n }n }nn pu
单例设计模式详解一:不安全的懒汉式(多线程环境验证)
单例设计模式详解一:不安全的懒汉式(多线程环境验证)单例设计模式详解一不安全的懒汉式多线程环境验证n写在前面的话n饿汉式n懒汉式n验证在多线程环境下懒汉式单例写法的不安全之处n写在前面的话前言:虽然工作也有 2 年了,自己也拼了命一样的自己学东西,但很感慨,很多问题都没有深入研究。最近正好有时间,仔仔细细研究了一下单例设计模式。在自己的博客中做一下记录。单例的英文写法是:Singleton,面试之前
spring在什么情况下线程不安全
1.Spring作为一个IOC/DI容器,帮助我们管理了许许多多的”bean”,但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码.n2.我们交由Spring管理的大多数对象其实都是一些无状态的对象,这种不会因为多线程而导致状态被破坏的对象适合Spring的默认scope,每个单里的无状态对象都是线程安全的(也就是说只要是无状态的对象,不管单例多例都是线程...
JAVA i++线程非安全测试1
i++ 线程非安全分析
为什么HashMap是线程不安全的,实际会如何体现?
  同步,指的是在一个时间点只能有一个线程可以修改hash表,任何线程在执行Hashtable的更新操作前都需要获取对象锁,其他线程则等待锁的释放。 n   n  第一,如果多个线程同时使用put方法添加元素。nn  假设正好存在两个put的key发生了碰撞(hash值一样),那么根据HashMap的实现,这两个key会添加到数组的同一个位置,这样最终就会发生其中一个线程的put的数据被覆盖。nn...
为什么HashMap是线程不安全的?
为什么HashMap是线程不安全的? n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;因为在HashMap的实现类中无可见线程同步的措施,比如说synchronize关键字或者显示锁处理等,所以当HashMap被定义为共享变量在多线程情况下使用的时候,就会出现一些问题。相比较起来线程安全的Hashtable(synchronized)、ConcurrentHashMap(分段锁)这...
为什么说ArrayList是线程不安全的?
一.概述nn对于ArrayList,相信大家并不陌生。这个类是我们平时接触得最多的一个列表集合类。nn面试时相信面试官首先就会问到关于它的知识。一个经常被问到的问题就是:ArrayList是否是线程安全的?nn答案当然很简单,无论是背来的还是自己看过源码,我们都知道它是线程不安全的。那么它为什么是线程不安全的呢?它线程不安全的具体体现又是怎样的呢?我们从源码的角度来看下。nn二.源码分析nn首先看
多线程之无状态对象和有状态对象
从网上搜到的信息,有状态对象就是有数据存储功能的对象。无状态对象就是没有数据存储功能的对象。通俗地讲,有状态对象就是有成员变量的对象。1、无状态对象一定是线程安全的无状态对象因为不包含任何域,也不包含任何对其他类中域的引用,计算过程中的临时状态仅存在于线程栈的局部变量中,并且只能由正在执行的线程访问,当前线程不会影响到其他正在运行的线程,所以无状态对象一定是线程安全的。2、有状态对象不一定是线程不...
Java多线程之安全发布对象
一、发布对象与对象逸出发布对象:使一个对象能够被当前范围外的代码使用。对象逸出:一种错误的发布,当对象没有构造完成时,就使它被其他线程所见。(1)不安全地发布对象@Slf4jnpublic class UnsafePublish {nn private String[] states = {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;};nn public String[] getStates() {n...
证明HashSet不是线程安全
之前同事问我个问题如何去证明HashSet是否是线程安全的,最近在系统的学习多线程,所以重新想起了这个问题,也写了个demo来证明HashSet不是线程安全的。 n什么是线程安全,就是对于数据的读写要线程隔离,不能导致数据的丢失和不一致,每次修改数据都不应该被覆盖掉。 n还是举银行取款的经典例子,账户A起初为0,线程A读出0,然后存100(还没写入数据),线程B读出为0,也存100,这个时候最后的账
解决多线程单例模式的线程不安全问题
DCL双检查锁机制public class MyConfig {n private volatile static MyConfig myConfig = null;//volatile 保证每个线程都是从主存中读取最新的数据 private MyConfig(){ }n public static MyConfig getInstance(){n if(nul
单例模式涉及到的线程安全问题
1.单例模式单例模式分为饿汉式和懒汉式,也即 即时加载和懒加载的分别 n下面分别看两个形式:1.1饿汉式class SingleHungry{n //1.首先私有化构造器,这样使该类不可以被其他对象创建对象n //2.自己内部创建对象n //3.写一个静态方法让外部调用实例n private static Single s = new Single();n //上面一句
通俗易懂的Java线程不安全
前言n线程安全是很常见的问题,但是什么是线程安全呢?n以下是百度百科的答案:nn线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。nn当然也有人会回答线程安全的三大特性:nn原子性n可见性n有序性nn而线程安全也是Java的面试题中的常客,但是我却存在以下疑问:n...
4.为什么SqlSession会是不安全的以及转账事务为什么要放在持久层?
n 为什么jdbc 的template必须从业务层一直传到持久层?因为事务要在业务层。n n怎么提交事务?connnection的conmmit方法。nn为什么事务层要放在业务层控制?看下图:nnnn如果放在持久层的话,每一个connection完成之后,都会完成一个提交自己的connection的独立的事务。那么每个提交的connection没有联系了,转账过程中也会出现问题,也无法解决,无法回...
ArrayList线程不安全与Vector线程安全
原因解释nn首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 n线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 n n 如图,List接口下面有两个实现,一个是ArrayList,另外一个是vector。...
Java基础之线程安全基本数据类型
先来个美女镇楼!别举报我开车哦~~ n n我们在开发安卓或者后台的时候,经常会开启多个线程或者进程。这样做的猿友肯定遇见过一个麻烦,那就是有的时候可能会出现多个线程访问一个变量。这个时候可能出现线程错位,访问到了我们不想让那个线程得到的数据。那么怎么办呢,常用的方法就是加锁,使用synchronized(object)加锁,也就是只允许当前一个线程去访问。byte[]lock =new byte[0
Java arraylist线程不安全 vectory 线程安全
如果你的代码所在的进程中有多个线程在同时运行,而这些线可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然可以将集合分为两组,线程安全和非线程安全,Vectore是用同步方法来是实现线程安全的而和他相似的ArrayList是线程不安全的。
懒汉式单例模式为何线程不安全
这里是一个懒汉式的示例代码:public class Singleton {n private static Singleton s;n n private Singleton() {n n }n n public static Singleton getInstance() {n if (s == null) {n //线程在这里等待n s = new Singleton();n ...
SimpleDateFormat是线程不安全的,怎样使用使其安全?
SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDa
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java都是学习什么 学习java的都是傻子