`
amigobot
  • 浏览: 5040 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

一个简单的线程安全问题

阅读更多

一个很简单的例子, 如何改写A, 让其线程安全?

 

class A {

    int i = 0;

    public getI() {

        return i;

    }

    public inc() {

        i++;

    }

}

 

重新复习了1.5JMM后发现问题比我几年以来想的都要复杂, 不知道是JAVA1.2时没有这么多编译优化还是怎么, 还是我把但是SCJP的内容都忘了。

现在写一种自认为的正确答案, 有错误请指正。 当然也有其他的实现。

class A {

    volatile int i = 0;

    synchronized public getI() {

        return i;

    }

    synchronized public inc() {

        i++;

    }

}

三处改动, 缺一不可。

 

 

分享到:
评论
1 楼 txzyhm521 2008-08-21  
getI() 是只读操作为什么同步?

相关推荐

    Java多线程 - (一) 最简单的线程安全问题

    本篇文章将深入探讨“最简单的线程安全问题”,并结合相关源码和工具来帮助理解。线程安全问题通常涉及到多个线程对共享资源的访问,如果管理不当,可能会导致数据不一致、死锁等问题。 首先,我们需要了解什么是...

    线程通信安全问题

    在这个场景下,我们主要探讨的是Java中的线程等待唤醒机制,这是一个用于解决线程同步问题的关键工具。 首先,我们要理解Java中的并发控制基础——synchronized关键字。synchronized可以用于方法或代码块,确保同一...

    Go-mapgen-一个简单线程安全类型安全的GOmap生成器

    mapgen - 一个简单,线程安全,类型安全的GO map 生成器

    C# 高效线程安全,解决多线程写txt日志类

    下面是一个简单的线程安全的txt日志类实现: ```csharp using System; using System.IO; public class ThreadSafeLogFile { private readonly object _logLock = new object(); private string _filePath; ...

    c++ stl线程安全

    在多线程编程中,线程安全通常指的是一个函数或操作在被多个线程并发调用时,能够正确地处理共享数据,不会因为线程间的交互导致错误。STL容器如`std::vector`和`std::map`在设计时并未考虑多线程环境下的线程安全性...

    C++实现线程安全队列

    以下是一个简单的线程安全队列的实现示例: ```cpp #include #include template class ThreadSafeQueue { private: std::queue<T> data; std::mutex mtx; public: void enqueue(const T& value) { std::...

    线程安全的单例模式

    综上所述,线程安全的单例模式实现是一个复杂的过程,需要综合考虑效率和线程安全两方面的因素。通过上述几种不同的实现方式,我们可以根据实际需求选择最适合的一种。其中,双重检查锁定因其较高的性能和线程安全性...

    servlet与Struts action线程安全问题分析(pdf)

    假设有一个简单的Servlet `ConcurrentTest`,它包含一个实例变量`output`用于输出用户的信息。`service`方法获取请求参数并输出用户的名字。为了模拟并发情况下的问题,我们在这个方法中添加了一个延时操作(`Thread...

    易语言线程安全之原子锁与读写锁

    在IT行业中,线程安全是多线程编程中的一个重要概念,确保多个线程并发执行时,数据的正确性和完整性不会受到影响。线程安全通常通过同步机制来实现,其中包括原子操作和锁机制。本文将深入探讨易语言中的原子锁与...

    hiredis的c++封装, 线程安全

    线程安全是多线程编程中的一个重要概念,它意味着多个线程并发访问同一资源时,不会导致数据不一致或引发异常。在C++中实现hiredis的线程安全,通常需要采用以下策略: 1. **互斥锁(Mutex)**:在执行Redis命令时...

    servlet与Struts action线程安全问题分析

    然而,由于它们基于Java的多线程环境运行,因此线程安全问题成为了一个不容忽视的挑战。本文将深入探讨servlet与Struts action中的线程安全问题,分析其原因,并提出相应的解决方案。 #### 二、servlet的多线程机制...

    一个多线程示例程序及多线程常见问题介绍

    一个简单的多线程示例可能包括以下步骤: 1. 创建一个新的`TThread`子类,并重写`Execute`方法,这里是你定义线程实际工作的地方。 2. 在`Execute`方法中,你可以编写需要在线程中运行的代码。 3. 初始化线程对象,...

    使用C++11实现线程安全的单例模式

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...

    线程安全型队列的实现

    在IT领域,线程安全是多线程编程中的一个重要概念,指的是当多个线程访问同一块资源时,代码能够正确地处理并发访问,避免数据不一致或死锁等问题。在这个"线程安全型队列"的课程设计中,我们将探讨如何在C语言环境...

    线程安全单例

    - 在 Java 中,类的初始化过程是线程安全的,这意味着当多个线程同时尝试初始化同一个类时,只会有一个线程成功执行初始化操作,其他线程会被阻塞直到初始化完成。 - 当第一次调用 `getInstance()` 方法时,JVM 会...

    深入研究Servlet线程安全性问题.pdf

    这意味着多个线程可能会同时访问同一个Servlet实例,因此需要特别注意线程安全性问题。 #### 三、Servlet线程安全问题分析 线程安全问题是由于Servlet中实例变量的使用不当导致的。在多线程环境中,如果多个线程...

    Java多线程-解决单例模式中的懒汉式的线程安全问题

    ### Java多线程—解决单例模式中的懒汉式的线程安全问题 #### 一、单例设计模式的线程安全问题 ##### (1)饿汉式没有线程安全问题 **饿汉式**是一种非常典型的单例模式实现方式,其特点是在类加载时就完成了实例...

    基于C++的线程安全容器。.zip

    例如,一个线程安全的栈可能包含以下关键元素: 1. **Mutex**: 使用`std::mutex`来保护对栈的修改操作,如push和pop。每当有线程试图访问栈时,它必须首先获取锁。如果锁已被其他线程持有,该线程将被阻塞,直到锁...

Global site tag (gtag.js) - Google Analytics