`

1. multi-thread --volatile

 
阅读更多
1. If a variable is declared with the volatile keyword then it is guaranteed that any thread that reads the field will see the most recently written value. The volatile keyword will not perform any mutual exclusive lock on the variable.

2. The simplest way to avoid problems with concurrency is to share only immutable data between threads.

To make a class immutable make:
1),all its fields final
2),the class declared as final
3),the this reference is not allowed to escape during construction


3. when to use volatile ?
1) if you want to read and write long and double variable atomically. long and double both are 64 bit data type and by default writing of long and double is not atomic and platform dependence.

2) Volatile variable can be used as an alternative way of achieving synchronization in Java in some cases, like Visibility. with volatile variable its guaranteed that all reader thread will see updated value of volatile variable once write operation  completed, without volatile keyword different reader thread may see different values.

3) volatile variable can be used to inform compiler that a particular field is subject to be accessed by multiple threads, which will prevent compiler from doing any reordering or any kind of optimization which is not desirable in multi-threaded environment.


分享到:
评论

相关推荐

    java-multi-thread-mechanism.rar_java thread ppt

    1. **线程的概念** - 线程是操作系统分配CPU时间片的基本单位,一个进程可以包含多个线程。 - 在Java中,每个应用程序至少有一个主线程,其他线程由用户创建或者由系统自动创建(如垃圾收集线程)。 2. **线程的...

    Java-multi-threads-programming.rar_java programming

    volatile关键字可以保证变量的可见性,但不保证原子性;而`synchronized`则同时保证了两者。 总的来说,Java多线程编程是一个深度和广度兼具的领域,涵盖了许多概念和技术,包括线程创建、生命周期管理、同步与通信...

    java-multi-thread:《 Java多线程编程核心技术》源代码-java source code

    1. **线程的创建与启动**: - `Thread` 类:通过继承 `Thread` 类并重写 `run()` 方法来创建线程。 - `Runnable` 接口:实现 `Runnable` 接口,然后将其实例传递给 `Thread` 的构造函数,避免单继承限制。 - `...

    nimbo-java-multi-threading:Java多线程演示代码

    - Java线程有10个优先级,`Thread.MIN_PRIORITY`(1)、`Thread.NORM_PRIORITY`(5,默认值)和`Thread.MAX_PRIORITY`(10),但实际效果依赖于操作系统的调度策略。 6. **线程中断与异常处理** - `Thread.interrupt()`...

    Google C++ International Standard.pdf

    1 Scope 1 2 Normative references 2 3 Terms and definitions 3 4 General principles 7 4.1 Implementation compliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Structure ...

    multi thread

    1. 继承Thread类:创建一个新的类,继承自Java的Thread类,重写其run()方法,然后创建该类的实例并调用start()方法启动线程。 ```java class MyThread extends Thread { public void run() { // 线程执行的任务 }...

    Java线程编程学习笔记(二)

    首先,标题中的“Java线程编程学习笔记(二)”表明这是系列教程的第二部分,暗示了前一部分可能已经介绍了线程的基础概念,如如何创建线程(通过实现Runnable接口或继承Thread类)、线程的状态(新建、就绪、运行、...

    Multi person chat_jdk1.8_java编程_

    1. **继承Thread类**:创建一个新的类,该类继承自Thread类,并重写其run()方法。然后创建该类的实例并调用start()方法启动线程。这种方法简单直接,但因为Java不支持多重继承,所以如果类已经继承了其他类,则无法...

    java多线程处理教学案例

    1. **Java线程创建** - **继承Thread类**:创建一个新的类,该类继承自`Thread`类,并重写`run()`方法。然后创建该类的对象并调用`start()`方法启动线程。 - **实现Runnable接口**:创建一个新的类实现`Runnable`...

    01-JAVA岗位笔试题(A卷)附答案

    在这种情况下,如果Redis中存储的是热点数据,那么使用`volatile-lru`或`volatile-ttl`淘汰策略确实可以较好地保证缓存中的数据是最常访问的数据。 #### 十四、用户角色权限模块(RBAC)的表设计 RBAC(Role-Based ...

    java并发编程源码-Concurrent-Programming-with-Java-and-OpenMP:并发编程分配源代码

    OpenMP(Open Multi-Processing)是一种并行编程模型,主要应用于C、C++和Fortran等语言。它通过提供一组编译器指令和库函数,使程序员能方便地在共享内存多核系统上进行并行编程。OpenMP支持动态分配线程,可以进行...

    百度持续交付项目组面试题

    **volatile关键字**用于标记变量的状态,当一个变量被声明为volatile时,任何对该变量的读写操作都直接发生在主存中,因此任何线程对该变量的修改都能被其他线程立即感知。 **线程安全**是指多个线程并发访问同一个...

    TestTaskForMTS

    这个名为"TestTaskForMTS"的项目似乎是一个针对Java技术的测试任务,可能是为了检验开发者对于Java多线程(Multithreading)或者Microservices(微服务)的理解和应用能力,因为"MTS"在某些情况下可以代表Multi-...

Global site tag (gtag.js) - Google Analytics