`
sammor
  • 浏览: 413778 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程 基本类型的原子性问题

阅读更多

在java的语言规格中,一开始就定义了一些原子的操作,如,char ,int 这些的赋值与引用是原子的,

例如,两个线程同时对int类型的字段n进行赋值,一个使n=123 ,一个线程使n=345.

那么最后n的值不是123就是345,而不用担心模式会混合在一起。

但long与double的指定,引用操作并不是不可分割的

如对于long类型的a 赋值 ,两个线程分别使其a = 1234L ,a = 5678L

结果可能为,1234L,也可能为5678L,也可能为12345678L,也可能0L,等其他的方式。

解决方法,

1、加synchronized内操作。

2、在前面加上volatile关键字,则这些字段的操作就会成为不可分割的了

分享到:
评论

相关推荐

    多线程程序中的原子操作

    通过对多线程程序中原子操作的理解和应用,我们可以更有效地解决多线程环境下的同步问题,提高程序的稳定性和可靠性。正确地使用原子操作不仅能够减少锁的使用,还能提高程序的性能。因此,在设计和实现多线程应用...

    Java多线程中提到的原子性和可见性、有序性1

    Java多线程编程中,原子性、可见性和有序性是三个关键的概念,它们确保了多线程环境下的正确性。 1. 原子性(Atomicity) 原子性指的是一个操作不可被中断,要么全部执行,要么完全不执行。在Java中,非原生类型的...

    java多线程的讲解和实战

    - `volatile`关键字:用于标记共享变量,确保多线程环境下的可见性和有序性,但不保证原子性。 - `join()`方法:让当前线程等待另一个线程完成其执行。 4. **线程优先级与调度**:Java的`Thread`类提供了设置线程...

    C++ 多线程求PI

    2. 同步与通信:多线程间的同步是必要的,以确保数据安全和正确性。`std::mutex` 可用于锁定共享资源,防止数据竞争。`std::condition_variable` 可用于线程间通信和等待特定条件。 3. 共享数据:使用 `std::atomic...

    15个多线程问题集锦

    ### 15个多线程问题集锦:Java多线程的核心使用问题及注意事项 #### 1. 多线程执行顺序控制 - **问题描述**:假设存在三个线程T1、T2、T3,如何确保T2在线程T1执行完毕后开始执行,而T3又在线程T2执行完毕后开始...

    多线程编程指南

    - **第一章**:关于多线程编程,介绍了多线程的基本概念、术语以及设计技巧。 - **第二章**:线程管理,讨论了如何创建线程、配置线程属性及编写线程主体。 - **第三章**:RunLoops,深入探讨了RunLoops的工作原理...

    自己总结的多线程

    ### 多线程基础 #### 1. 多线程概念 多线程是指在一个程序中包含多个控制流,它们可以并发执行不同的任务。在Java中,多线程的实现通常借助于`Thread`类或实现`Runnable`接口。多线程能够提高CPU的利用率,改善应用...

    C++11 多线程

    这对于多线程环境中的数据一致性和完整性非常重要。 - **`std::future` 和 `std::async`**:`std::future`用于从异步操作中获取结果,而`std::async`用于发起异步操作。这些工具可以帮助开发者更容易地处理异步计算...

    java多线程笔记全手打

    线程安全主要涉及原子性、可见性和有序性问题。Java提供了一系列并发工具类,如`Atomic`系列类、`ConcurrentHashMap`、`BlockingQueue`等,帮助开发者编写线程安全的代码。 十、线程间的协作 通过`CountDownLatch`...

    多线程控制红绿灯变化

    可以使用枚举类型或者布尔变量来表示当前灯的状态,并确保在状态转换时的原子性。 5. **异常处理**:考虑到可能存在线程中断或其他异常情况,需要适当地处理这些异常,确保程序的健壮性。 6. **死锁避免**:虽然在...

    C++面向对象多线程编程

    C++作为一门强大的静态类型语言,提供了丰富的库支持来实现多线程,如STL中的`<thread>`库,以及C++11及后续标准引入的并发工具。书中将详细讲解这些工具的使用方法和最佳实践。 首先,本书会介绍C++中的线程基础,...

    OC多线程管理

    在iOS和OS X开发中,Objective-C(OC)的多线程管理是至关重要的技能,它关乎应用的性能、响应速度以及资源利用效率。...通过合理的多线程管理,不仅能优化程序性能,还能提高代码的可读性和可维护性。

    C#多线程Demo

    使用`Parallel`类,开发者无需手动创建和管理线程,降低了多线程编程的复杂性。 二、`Parallel.For`和`Parallel.ForEach` 1. `Parallel.For`: 这个方法用于并行执行一个整数范围内的循环。其基本语法为: ```csharp...

    面向对象的多线程编程

    - **原子操作**:C++还提供了原子类型(`std::atomic<T>`),用于实现无锁编程,提高并发性能。 #### 面向对象的多线程设计 在多线程环境中使用面向对象编程有其独特的优势: - **封装性**:通过封装,可以隐藏...

    JAVA 多线程学习笔记

    3. volatile:保证变量在多线程环境下的可见性,但不保证原子性。 4. Lock接口:提供更细粒度的锁控制,比如可重入、公平性、非阻塞尝试获取锁等。 四、线程通信 1. wait()、notify()和notifyAll():这三个方法...

    多线程编程指南_学习多线程编程的宝典

    总结,多线程编程在C++中既具有挑战性,也充满机遇。理解并掌握上述知识点,能帮助开发者编写高效、稳定的多线程程序,充分发挥C++的潜力。通过实践和不断学习,你将能够应对复杂的并发场景,构建出高性能的应用系统...

    并发编程——原子操作CAS.pdf

    在介绍原子操作的实现原理时,文档详细解释了操作的原子性问题,并通过代码示例和执行结果来说明。以一个简单的加法操作为例,介绍了它实际上涉及到读取变量值、加法运算和赋值三个动作,而这些动作并不具备原子性。...

Global site tag (gtag.js) - Google Analytics