面试问题:
下面的方法是线程安全的吗?如果不是如何使它线程安全?
这篇文章解释了经常被谷歌和其他许多公司普遍的面试问题。这是低层次的因为无需涉及到如何设计并发程序。
首先,答案是NO。这个方法不是线程安全的,因为counter++操作不是原子性的,意味着它由多于一个原子操作组成。这个例子中,一个线程访问此值而另外一个线程对其进行增加操作。
当线程1在t1时访问此方法时,线程2还未对此方法进行操作。因此线程1返回的值是没有被增加的。
使一个方法线程安全——方法 1
给这个方法加上同步并使其线程安全。当给一个static方法加上synchronized时,Class对象会被锁定。
这样就使它同步了吗?答案是 YES。
如果此方法不是static,那么加synchronized关键字是对这个类的实例进行同步,而不是Class对象。
使一个方法线程安全——方法 2
在这个计数器的例子中,我们实际上可以通过java.util.concurrent.atomic中的AtomicInteger使count++成为原子性的。
关于线程安全其他有用的因素
Java中local变量是线程安全的。
每个线程有自己的栈。两个不同的线程绝不会共用同一个栈。一个方法中定义的所有local变量会在一个栈中分配内存。只要当前线程执行完此方法,栈帧将被删除。
原文:http://www.programcreek.com/2014/02/how-to-make-a-method-thread-safe-in-java/
相关推荐
Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...
### Java并发中的线程安全性 #### 1. 引言 随着Java技术的发展以及多核处理器的普及,Java并发编程成为软件开发中的一个重要领域。Java并发控制问题是国内外学者研究的热点之一,特别是在J2SE 1.5版本中引入了`...
Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...
Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...
但是需要注意,虽然这个方法可以保证基本的线程安全,但迭代仍然是非线程安全的,即不能在遍历过程中修改Map。 2. 使用ConcurrentHashMap:Java从1.5版本开始引入了ConcurrentHashMap,它是线程安全且高并发性能的...
JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...
Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与...
这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...
在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-...
java内存模型和线程安全,详细解析java的 堆栈模型和线程机制
Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...
基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多...
### Java开发中的线程安全选择与Swing 在Java开发中,Swing作为构建桌面应用程序图形用户界面(GUI)的主要工具之一,其设计目标是为了提供一个强大、灵活且易于使用的框架。Swing允许开发者轻松创建自定义组件或...