• Java线程之间通信


    用多线程的目的:更好的利用CPU的资源。因为所有的多线程代码都可以用单线程来实现。

    多线程:指的是这个程序(一个进程)运行时产生了不止一个线程。

    并行:多个CPU实例或者多台机器同时执行一段处理逻辑,是真正的同时。

    并发:通过CPU调度算法,让用户看上去同时执行,实际上从CPU操作层面不是真正的同时。

    线程安全:经常用来描绘一段代码。指在并发的情况下,该代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要

    关注系统的内存,CPU是不是够用即可。

    线程不安全:线程的调度顺序会影响最终结果,如不加事务的转账代码。

    同步:Java中的同步指的是通过人为的控制和调度,保证共享资源的多线程访问称为线程安全,来保证结果的准确。在保证结果准确的同时,提高性能,才是优秀的程序。

    线程安全的优先级高于性能。

    Java的并发采用的是共享变量模型

    Java线程之间的通信由Java内存模型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。

    从图中可以看出,如果线程A与线程B之间要通信的话,必须要经历下面两个步骤:

    1、线程A把本地内存A中更新过的共享变量刷新到主内存中去。

    2、线程B到内存中去读取线程A之前已更新过的共享变量。

    可通过下面例子来说明这两个步骤:

    如图所示,本地内存A和本地内存B由主内存中共享变量x的副本。假设在最开始时,这3个内存中的x值都为0。线程A在执行时,把更新后的x值(假设值为1)临时存放在自己的本地内存A中。

    当线程A和线程B需要通信时,线程A首先会把自己本地内存中修改后的x值刷新到主内存中,此时主内存中的x值变为1.随后,线程B到主内存中去读取线程A更新后的x值,此时线程B的本地内

    存的x值也变为1。

    从整体来看,这两个步骤实质上是线程A在向线程B发送消息,而且这个通信过程必须要经过主内存。JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。

    参考资料:http://www.jianshu.com/p/40d4c7aebd66

  • 相关阅读:
    Dubbo源码分析系列---服务的发布
    Dubbo源码分析系列---扩展点加载
    Jdk动态代理和CGLIB动态代理大比拼
    定时任务的一些思路
    技术人的职业发展
    2017面试碎碎念
    Tiny Mapper
    RabbitMQ 简介
    Load Test Analyzer Overview
    2015 如期而至,你好
  • 原文地址:https://www.cnblogs.com/xh0102/p/5798244.html
Copyright © 2020-2023  润新知