`
炮飞天
  • 浏览: 8326 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java中如何使方法线程安全?

    博客分类:
  • java
阅读更多

面试问题:

下面的方法是线程安全的吗?如果不是如何使它线程安全?

Capture.PNG

 

这篇文章解释了经常被谷歌和其他许多公司普遍的面试问题。这是低层次的因为无需涉及到如何设计并发程序。

 

首先,答案是NO。这个方法不是线程安全的,因为counter++操作不是原子性的,意味着它由多于一个原子操作组成。这个例子中,一个线程访问此值而另外一个线程对其进行增加操作。

thread-safe-method1.png

当线程1在t1时访问此方法时,线程2还未对此方法进行操作。因此线程1返回的值是没有被增加的。

 

使一个方法线程安全——方法 1

 

给这个方法加上同步并使其线程安全。当给一个static方法加上synchronized时,Class对象会被锁定。

这样就使它同步了吗?答案是 YES。

Capture.PNG

如果此方法不是static,那么加synchronized关键字是对这个类的实例进行同步,而不是Class对象。

 

使一个方法线程安全——方法 2

 

在这个计数器的例子中,我们实际上可以通过java.util.concurrent.atomic中的AtomicInteger使count++成为原子性的。

Capture.PNG

 

关于线程安全其他有用的因素

 

Java中local变量是线程安全的。

每个线程有自己的栈。两个不同的线程绝不会共用同一个栈。一个方法中定义的所有local变量会在一个栈中分配内存。只要当前线程执行完此方法,栈帧将被删除。

 

原文:http://www.programcreek.com/2014/02/how-to-make-a-method-thread-safe-in-java/

分享到:
评论

相关推荐

    Java多线程与线程安全实践(基于Http协议的断点续传)源码.zip

    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多线程与线程安全实践-基于Http协议的断点续传 Java多...

    java线程安全测试

    Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...

    关于如何解决HashMap线程安全问题的介绍

    但是需要注意,虽然这个方法可以保证基本的线程安全,但迭代仍然是非线程安全的,即不能在遍历过程中修改Map。 2. 使用ConcurrentHashMap:Java从1.5版本开始引入了ConcurrentHashMap,它是线程安全且高并发性能的...

    JAVA多线程与线程安全实践-基于Http协议的断点续传.rar

    JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与...

    JAVA单线程多线程

    这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...

    Java多线程安全集合

    在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...

    Java中懒汉单例设计模式线程安全测试

    Java中懒汉单例设计模式线程安全测试,单例设计模式的测试

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-...

    java内存模型和线程安全

    java内存模型和线程安全,详细解析java的 堆栈模型和线程机制

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    基于Http协议的断点续传-Java多线程与线程安全实践编程.zip

    基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多...

    Java开发中的线程安全选择与Swing

    ### Java开发中的线程安全选择与Swing 在Java开发中,Swing作为构建桌面应用程序图形用户界面(GUI)的主要工具之一,其设计目标是为了提供一个强大、灵活且易于使用的框架。Swing允许开发者轻松创建自定义组件或...

Global site tag (gtag.js) - Google Analytics