线程结束时,工作内存会同步到主内存吗,请详细说明一下 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 28.57%
Bbs5
本版专家分:4259
Blank
黄花 2017年4月 Java大版内专家分月排行榜第二
Bbs1
本版专家分:0
Bbs5
本版专家分:4259
Blank
黄花 2017年4月 Java大版内专家分月排行榜第二
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:10
Bbs1
本版专家分:0
Bbs2
本版专家分:140
Bbs2
本版专家分:140
Bbs2
本版专家分:140
其他相关推荐
servlet线程安全问题的详解
摘 要:介绍了Servlet多线程机制,通过一个实例并结合Java 的内存模型说明引起Servlet线程不安全的原因,给出了保证Servlet线程安全的三种解决方案,并说明三种方案在实际开发中的取舍。      Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所 以,在编写代码时需要非常细致地考虑多线程
java如何实现让程序暂停1s再继续执行?
java如何实现让程序暂停1s再继续执行? www1314520sss | 浏览 16157 次  问题未开放回答 |举报 推荐于2017-09-10 16:16:36 最佳答案 被采纳的那位有个小错误 1 2 3 4 5 6 7 8 9 10 11 12
java笔记--关于线程同步(5种同步方式)
为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,      从而保证了该变量的唯一性和准确性。       1.同步方法      即有synchronized关键字修
JVM内存模型 - 主内存线程独立的工作内存
JVM内存模型 - 主内存线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存线程只能访问自己的工作内存,不可以访问其它线程工作内存工作内存中保存了主内存共享变量的副本,线程要操作这些共享变量,只能通过操作工作内存中的副本来实现,操作完毕之后再同步回到主内存当中。如何保证多个线程操作主内存的数据完整性是一个难题,Java内存模型也规
System.out,println对多线程的影响,以及主内存工作内存同步
先说一下之前对System.out.println的误会先举个例子package com.yigjn.Thread; public class MyThread extends Thread { private int count = 0; @Override public void run() { for (int i = 0; i < 10000; i++) { ...
Java对变量操作相关的主内存工作内存
    Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,每条线程还有自己的工作内存(Working Memory),线程工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量,不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值得传递均需要通过主内存来实现。线程、主内存和...
java多线程工作内存剖析
最近看了各种关于java线程的文章, 但我觉得它们对java线程工作内存都没有讲清楚, 并且非常的误导人. 大多数文章都直接丢了张图说每个线程里面有块空间叫工作内存, 但实际上呢, 按照java虚拟机规范的说法, 每个线程都有自己私有的PC计数器和一个虚拟机栈, 根本就没有所谓的工作内存. 继续深入java虚拟机的实现, 会发现这个大多数文章想说的工作内存其实指的是栈帧中的局部变量表, 其中会保
线程间的内存共享问题----你弄懂了吗?
线程间共享内存的问题,许多同学是不是都觉得很简单?就是用全局变量来共享码,然而你说的并没有什么卵用…….(^__^)……. 对于线程内存关系不弄得清清楚楚,很难写好多线程程序。最简练而精准的话来形容线程间共享内存:同一个线程组内线程间共享虚拟内存(自己通过实验总结的,然而不久以后发现一本书中(linux设备驱动程序)早就说过了,我读书好少啊O(∩_∩)O哈哈~) 虚拟内存没弄懂,就看看相关资
关于多线程导致数据不一致的情况的思考
这里我要引入一个比较不是很常见的Java 内存模型(JMM java Memory Model),线程基础数据会存放在一个自身对应的线程栈中,如果两个线程需要交互必须要通过共享内存中的变量进行。才能够达到线程间通信的效果。但是由于JVM可以对他们进行任意排序以提高程序的性能。同时处理器也会对指令进行优化。这些操作会导致在多线程环境下数据变得不可靠。因为指令的顺序因为处理器的优化导致了一些不稳定的因
线程结束资源释放 线程终止
线程创建时,系统会分配给线程一些资源,我们可以看到的就是线程描述符,线程堆栈,在系统内部还会有更复杂的系统维护一些信息,在线程创建时,内核总会为其维护一些资源,比较理想的情况是线程运行结束后,释放系统资源和进程资源,包含线程返回值占用的内存线程堆栈,寄存器状态等等,以备后来者的使用. 线程执行结束后释放资源的三种方法:   利用这些方法,我们可以避免线程退出时,系统资源仍
java 单例模式及在SSH框架中运用
定义: 确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。 代码: Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的。 Java代码   /**   * 线程安全的单例模式   * 饿汉式单例   * @author Administrator   *
继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
一 简介 如题所示,有时候我们需要在一个请求到达Controller之前能够截获其请求,并且根据其具体情况对 HttpServletRequest 中的参数进行过滤或者修改。这时,有的同学可能会想:我们是否可以在一个Filter中将 HttpServletRequest 里的所有参数都取出来分别进行过滤然后再放回到该HttpServletRequest 中呢? 很显然,在 HttpSe
jsp和servlet有什么区别?
Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。   如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去
递归整理及几个经典题目
递归+几个经典题目的解析
书单推荐:成为Java顶尖程序员 ,看这11本书就够了
“学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考、雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料 2.对着书上的代码自己敲的时候方便 “看完书之后再次提升自我的最好途径是看一些相关的好博文“,我个人认为这是学习的第二步,因为一本书往往有好几百页,好的博文是自己看书学习之后的一
Java内存模型(二):主内存工作内存的交互
相关名词解释我们将会用到几个名词,先来搞清楚这几个名词的含义。 - Java内存模型 Java虚拟机规范中定义的Java内存模型,其目标是屏蔽各种硬件和操作系统的内存访问差异,实现Java程序在各种平台下都能达到一致的内存访问效果,具体体现在其在程序中遵循的各种变量(包含实例字段、静态字段、不变字段和数组对象)的访问规则(可以理解为将变量从内存中取出和存储到内存的底层细节)。Java
JVM主内存工作内存的关系
java线程内存分析 转载自博客 http://blog.csdn.net/zhuyijian135757/article/details/51335121 线程工作内存、主内存三者之间的交互关系图:   key edeas 所有线程共享主内存 每个线程有自己的工作内存 refreshing local memory to/from main
JMM主内存工作内存交互
Java虚拟机内存模型中定义了8种关于主内存工作内存的交互协议操作: lock:作用于主内存的变量,把一个变量标识为一条线程独占状态。 unlock:作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量可以被其他线程锁定。 read:作用于主内的变量,把一个变量的值从主内存传输到线程工作内存中,以便随后的load动作使用。 load:作用于工作内存的变量,把read读取操作从主内存
线程工作内存与主内存
线程工作内存是cpu寄存器和高速缓存的抽象描述,使用频率高的数据从主存拷贝到高速缓存中,每个线程在cpu高速缓存中对拷贝的数据进行读取、计算、赋值,再在合适的时候同步更新到主存的该数据,如i=1,i+1=2,若2在更新到主存前,其他线程是不知道该值被改变了,其他线程高速缓存中该值依然为1. 解决方法:需要各线程间可见的变量前加上volatile修饰,在一个线程的高速缓存中改变该值时,其他线程会获
线程内存泄露问题
最近在定位一个创建线程失败的问题,创建线程线程执行完毕后自动销毁,大概运行1.5天后,就会出现线程创建失败情况。 计算了一下线程创建次数,大概在1800次左右。怀疑是内存不够导致,使用top命令查看内存增长情况,发现有一个进程内存占用率不断增加,检查代码排除掉申请堆空间忘释放情况,上网搜了一下,发现使用pthread_create(&threadid, NULL, func, NULL);形式
线程工作内存
所谓线程的“工作内存”到底是个什么东西?有的人认为是线程的栈,其实这种理解是不正确的。看看JLS(java语言规范)对线程工作 内存的描述,线程的working memory只是cpu的寄存器和高速缓存的抽象描述。         可能 很多人都觉得莫名其妙,说JVM的内存模型,怎么会扯到cpu上去呢?在此,我认为很有必要阐述下,免 得很多人看得不明不白的。先抛开java虚拟机不谈,我
线程内存
在多个线程之间共享了Count类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线程栈),工作内存存储了主内存Count对象的一个副本,当线程操作Count对象时,首先从主内存复制Count对象到工作内存中,然后执行代码count.count(),改变了num值,最后用工作内存Count刷新主内存Count。当一个对象在多个内存中都存在副本时,如果一个内存修改了共享变
线程中总内存线程工作内存
Java内存模型将内存分为了 主内存工作内存 。类的状态,也就是类之间共享的变量,是存储在主内存中的,每个线程都有一个自己的工作内存(相当于CPU高级缓冲区,这么做的目的还是在于进一步缩小存储系统与CPU之间速度的差异,提高性能),每次Java线程用到这些主内存中的变量的时候,会读一次主内存中的变量,并让这些内存在自己的工作内存中有一份拷贝,运行自己线程代码的时候,用到这些变量,操作的都是自己...
Java线程内存模型,线程工作内存、主内存
    java线程内存模型 线程工作内存、主内存三者之间的交互关系图: key edeas 所有线程共享主内存,每个线程有自己的工作内存 refreshing local memory to/from main memory must comply to JMM rules 产生线程安全的原因 线程的working memory是cpu的寄存器和高速缓存的抽象描述:现在的计...
Synchronized的内存可见性
在Java中,我们都知道关键字synchronized可以用于实现线程间的互斥,但我们却常常忘记了它还有另外一个作用,那就是确保变量在内存的可见性 - 即当读写两个线程同时访问同一个变量时,synchronized用于确保写线程更新变量后,读线程再访问该 变量时可以读取到该变量最新的值。 比如说下面的例子: public class NoVisibility { private s
线程读书笔记二(java内存模型、volatile变量、内存模型与synchronized、CAS)
java内存模型 java中,线程之间的通信是通过共享内存的方式,存储在堆中的实例域,静态域以及数组元素都可以在线程间通信。java内存模型控制一个线程对共享变量的改变何时对另一个线程可见。 线程间的共享变量存在主内存中,而对于每一个线程,都有一个私有的工作内存工作内存是个虚拟的概念,涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化,总之就是指线程的本地内存。存在线程本地内存中的变量值
java挑战高并发(13):synchronized对内存可见性起到的作用
加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化。而线程同步恰恰也能够实现这一点。      内置锁可以用于确保某个线程以一种可预测的方式来查看另一个线程的执行结果。为了确保所有的线程都能看到共享变量
多任务和高并发的内存交互
多任务和高并发的内存交互 http://blog.csdn.net/u011080472/article/details/51337422 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发
【Java】线程内存模型,线程工作内存、主内存
java线程内存模型 线程工作内存、主内存三者之间的交互关系图: key edeas 所有线程共享主内存,每个线程有自己的工作内存 refreshing local memory to/from main memory must comply to JMM rules 产生线程安全的原因 线程的working memory是cpu的寄存器和高速缓存
解决多线程内存可见性的方式
    上一篇博客已经讲到了内存可见性问题,内存可见性所表现出来的问题就是失效数据,而有效规避这种问题的方法就是同步。本篇博客将告诉你具体采用哪些同步方式可以解决这类问题:加锁,volatile变量。1、  加锁与可见性    内置锁可以确保某个线程以一种可预测的方式来查看另一个进程的执行结果。看下面这张图,当线程A执行某个同步代码块时,线程B随后进入由同一个锁保护的同步代码块,在这种情况下可以保...
深入理解Java的堆内存线程内存
为啥Java存在并发不一致问题的根本原因
JVM之内存模型JMM中本地内存的理解
1、JMM产生背景和定义 JMM(Java内存模型)源于物理机器CPU架构的内存模型,最初用于解决MP(多处理器架构)系统中的缓存一致性问题,而JVM为了屏蔽各个硬件平台和操作系统对内存访问机制的差异化,提出了JMM的概念。Java内存模型是一种虚拟机规范,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同...
内存可见性
首先看看什么是可见性? 可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到 共享变量:如果一个变量在多个线程工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 Java内存模型(JMM)的介绍Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)的访问规则,及在JVM中将变量存储到内存和从内存中读取出变量的底层细节 1.所
jvm volatile 实现并发 解决副本缓存变量在工作内存中获取最后的值
 在Java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块(synchronized) 和 volatile 关键字机制。 synchronized(不做过多解释)同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加...
内存工作内存
java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(variable)与java编程中所说的变量略有区别,它包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不存在竞争问题。     java内存模型规定了所有的变量都存储在主内存中。每条线程还有自己的
聊聊高并发(三十四)Java内存模型那些事(二)理解CPU高速缓存的工作原理
在上一篇聊聊高并发(三十三)从一致性(Consistency)的角度理解Java内存模型 我们说了Java内存模型是一个语言级别的内存模型抽象,它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的统一的接口来提供保证内存一致性的编程能力。 在一致性这个问题域中,各个层面扮演的角色大致如下: 1. 一致性模型,定义了各种一致性模型的理论基础 2. 硬件层,提供了实现某些一致性模型的硬件能力
Java内存模型 - 工作内存和主内存
JVM规范定义了Java内存模型(Java Memory Model)来屏蔽各种操作系统、虚拟机实现厂商和硬件的内存访问操作差异,以确保Java程序在所有操作系统和平台上能够实现其“一次编写、到处运行“的效果。 Java内存模型的指定既要严谨,保证语义无歧义,还要保证一定的宽松,允许各个厂商和硬件制作商有足够灵活性来充分利用硬件的特性来提升Java的内存访问性能。 工作内存和主内存 Java...
线程内存可见性Volatile(一)
从这篇博文开始,我们开始分享一些多线程的内容,毕竟在工作中,使用多线程比较多。多总结一下,终归没有坏处。这个系列的文章不会特别长,争取在3到5分钟之间结束,主要以说明白内容,给出相应的解决方案,重点在于实践。如标题所示,这篇博文我们简单的介绍一下内存可见性问题,之前,要简单的介绍一下什么是内存模型?内存模型什么是JAVA 内存模型?Java Memory Model (JAVA 内存模型)是描述线程
Java线程与并发编程实践
Java
JVM学习笔记(六)主内存工作内存
一、    主内存工作内存 Java内存模型规定了所有的变量都存储在主内存中。每条线程还有自己的工作内存线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。 不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。 内存间交互操作 关于java内存模型的8种操作(具有原子性)的流程图(纯属个人理解):其中lock和unlock不做解
CPU缓存与Java内存模型
CPU多级缓存 局部性原理: 1)时间局部性:如果某个数据被访问,那么在不久的将来它很可能再次被访问; 2)空间局部性:如果某个数据被访问,那么它相邻的数据很快也可能被访问。 缓存一致性(MESI) 定义了四种cache life的四种状态: 状态 描述 M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。 E(Exclus...
多进程与多线程的优劣 与 共享内存同步问题
通常会说: 进程之间的地址空间是独享的,而线程是共享进程的地址空间,线程的资源比进程小,创建线程比创建进程快,线程间切换快,线程间通信快,线程资源利用率好. 下面做个补充: 1,线程挂则可能导致进程挂,稳定性差。对长时间运行的serve程序,这一点尤为重要。所以为了兼顾稳定性和性能,很多程序中采用multi-process +multi-thread. 2,线程受进程资源的限制,比如:
JVM之内存构成(二)--JAVA内存模型与并发
物理机中的并发硬件效率与一致性 Java线程执行的内存模型 工作内存内存 内存间交互 long和double的非源自性协定 Volatile类型变量的特殊规则和语义 保证可见性 禁止指令重排优化 高效并发的原则 可见性有序性和原子性 先行发生Happens-Before这部分内容,跟并发有关我们知道,多任务处理,在现代操作系统几乎是必备功能。让计算机同时去做几件事情,不仅因为CPU运算能力太强大
线程变量同步机制
线程中同一个变量会共享,但是有时候会发现不同线程中的共享变量,值不同步,原来每个线程都会有自己的内存存放变量的缓存值,而不是一起使用主内存中的变量值。 问题:主线程的while循环中,当flag为true时,循环体为空的话,后面的打印语句不会执行,会一直在while里循环; 而在循环体中加上一句语句,比如System.out.println(),循环就会正常结束,执行后面的输出语句。 为什么当while循环体为空时不会退出循环,加入一句打印就会退出循环?
同步与Java内存模型(原子性,可见性,有序性)
同步与Java内存模型(一)序言先来看如下这个简单的Java类,该类中并没有使用任何的同步。final class SetCheck { private int a = 0; private long b = 0; void set() { a = 1; b = -1; } boolean check() { r
java多线程-线程内存模型
1. 概述   多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。 2.硬件的效率与一致性
main线程终止时其中的子线程也不会终止
Java中main线程只是一个用来启动应用程序的普通非守护线程,main线程终止时其中的子线程也不会终止不防来做个实验:上述一个main主线程里面产生了两个子线程,内容为打印当前线程的名字,当输出  main is over  说明main线程即将终止运行结果如下:如此说明:main线程终止后其中的子线程也正常进行...
深入剖析ThreadLocal实现原理以及内存泄漏问题
ThreadLocal;2017京东校园招聘笔试
堆栈与内存的关系
jsjjms(嵌入研究嵌入系统) //转    明确区分堆与栈    在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。    首先,我们举一个例子:    void f() { int* p=new int[5]; }    这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他
java线程内存模型,线程工作内存、主内存
java线程内存模型,线程工作内存、主内存 java线程内存模型 线程工作内存、主内存三者之间的交互关系图:   key edeas 所有线程共享主内存 每个线程有自己的工作内存 refreshing local memory to/from main memory must  comply to JMM rules
进程线程及堆栈之间内存分配和关系总结
进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元
Java之多线程内存可见性_2(synchronized可见性原理)
可见性: 要实现共享变量的可见性,必须保证2点: 1.线程修改后的共享变量值能够及时从工作内存刷新到主内存中。 2.其他线程能够及时把共享变量的最新值从主内存更新到自己的工作内存中。 以下的记录都是来源于慕课网-细说java多线程内存可见性 Java语言层面你支持的可见性实现方式:(不包含jdk1.5之后的一些高级特性) 1.synchronized 2.volatil
Java内存模型-同步操作与规则
Java内存模型-同步操作与规则 内存间交互操作,其实就是关于主内存工作内存之间具体的交互协议,即一个变量如果从主内存拷贝到工作内存,如果从工作内存同步回猪内存之内的实现细节。Java内存模型定义以下8中操作来完成。 Lock 主内存变量标记成一个线程独占的状态 Unlock 将主内存一个锁定的状态变量给释放出来,释放后的变量可以被其他线程锁定 Read 将主内存的变量...
JMM内存可见性与顺序一致性模型
首先让我们从as-if-serial语义讲起,程序执行时为提高性能,编译器和处理器常常会对指令做重排序,该语义是指不管怎么重排序,单线程程序的执行结果不能被改变。根据该语义存在数据依赖关系的操作不会发生重排序,因为这种重排序会改变程序的执行结果,部分存在控制依赖关系的操作可以做重排序。编译器和处理器中为了实现as-if-serial语义,定义了一系列的重排序规则,并通过内存屏障指令实现。 内存
java-多任务和高并发的内存交互
此文只是学习笔记,会有错误和不足,日后还会完善。 参考:https://blog.csdn.net/u011080472/article/details/51337422 缓存的出现是由于计算机的存储设备与处理器的运算能力之间差距极大,为了平衡这种情况,加入缓存来作为内存和cpu之间的缓冲。 但是又引发引发新的问题:缓存一致性,保证缓存一致性的协议有多个,例如:MSI、MESI、MOSI及D...
简单阐述JAVA内存模型中工作内存"拷贝"的理解
上一篇博客说过了有关Android的HTTP API 的基础使用规则(包括一些基础类的讲解和项目中应该注意的问题)。这次仍然结合上一次的问题,在项目中碰见的另一个问题来说。 在项目中,向服务器发出请求的网络线程线程不止有一个,比如,用户在获取联系人列表的时候,回向服务器发送一个线程请求,但是从启动而言,总是有个一个轮询线程,这个线程每隔10s会请求一次服务器,然后把服务器的内容返回给客户端。现在问
Java内存模型与线程02:主内存工作内存
一、引言 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来拼搏掉各种硬件和操作系统的内存访问差异,以实现让Java程序直接在各种平台下都能达到一致的内存访问效果。在此之前,主流编程语言(C、C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问却经常出
JVM主内存工作内存
jvm主内存工作内存    首先,JVM将内存组织为主内存工作内存两个部分。    主内存主要包括本地方法区和堆。每个线程都有一个工作内存工作内存中主要包括两个部分,一个是属于该线程私有的栈和对主存部分变量拷贝的寄存器(包括程序计数器PC和cup工作的高速缓存区)。  1.所有的变量都存储在主内存中(虚拟机内存的一部分),对于所有线程都是共享的。2.每条线程都有自己的工作内存工作内存中保存...
从java线程内存空间
1、实现线程的三种方式       使用内核线程实现     内核线程(KernelThread, KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(LightWeight Process,LWP),轻量级进程就
浅析JAVA堆内存和栈内存的区别
参考堆内存:https://baike.baidu.com/item/%E5%A0%86%E5%86%85%E5%AD%98/7270805?fr=aladdin栈内存:https://baike.baidu.com/item/%E6%A0%88%E5%86%85%E5%AD%98Java把内存划分成两种:一种是栈内存,一种是堆内存。一、栈内存存放基本类型的变量,对象的引用和方法调用,遵循先入后出...
Java调优之jvm和线程内存分析: xss与线程
Java调优之jvm和线程内存分析 Post by 铁木箱子 in Java on 2010-08-14 13:13. 点评一下 评论 (2) 阅读 (716) [转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc [本文地址] 本文永久地址是:http://www.mzone.cc/article/321.html
内存工作内存的交互8种操作必须遵循以下规则
在将变量从主内存读取到工作内存中,必须顺序执行read、load;要将变量从工作内存同步回主内存中,必须顺序执行store、write。并且这8种操作必须遵循以下规则:  - 1,不允许read和load、store和write操作之一单独出现。即不允许一个变量从主内存被读取了,但是工作内存不接受,或者从工作内存回写了但是主内存不接受。  - 2,不允许一个线程丢弃它最近的一个assign操作
线程情况下,主线程先退出,子线程会被强制退出吗
1、进程中线程之间的关系 线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。 但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(...))。 main执行完之后, 会调用exit()。 exit() 会让整个进程over终止,那所有线程自然都会退出。 2、主线程先退出,子线程
Java内存模型与Java线程的实现原理
Java内存模型与Java线程的实现原理
并行编程之指令重排
什么是指令重排?为什么会指令重排? 为了使得处理器内部的运算单元能尽量被充分利用,处理器可 能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序 执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算 的先后顺序与输入代码中的顺序一致,因此,如果存在一个计算任务依赖另外一个计算任务 的中间结果,
主队列中添加的同步操作永远不会被执行,会死锁原因
主队列在执行dispatch_sync,函数会把一个block加入到指定的队列,此函数要求执行完block才返回,函数要求此时去执行block内容,但是主队列此时还在卡在函数,函数线程还在,不能去执行block,也就是说函数和block是两个操作,在队列中前后关系。若是异步,函数添加完block就返回,顺序执行block内容,不存在死锁问题
Java内存区域与Java内存模型
Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有其用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。 方法区(Method Area):方法区属于线程共享的内存区域,又称Non-Heap(非堆),主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,根据...
线程操作malloc内存
这个问题的引出是由于,在实际应用过程中遇到主程序需要调用独立的功能模块(API),并获取其返回结果, 可以通过文件操作,将功能模块生成结果写入日志,主程序读取日志结果,而主程序提取日志信息后,要需要形成新的 日志文件,这个过程就涉及到三次文件打开关闭操作,影响软件性能;     API实际处理运算是在其内部创建的子线程的子线程(该API是在第三方API基础封装)中完成,线程创建过程能够传递
进程结束new出的内存会回收吗?
      今天调试程序,弄得有点纠结。无意间,和一帮同事讨论起一个问题:进程结束操作系统会回收new的内存吗?在自己的印象中,一直固执地认为,在使用C++操作分配对象内存后,如果程序员自己不用相应的delete操作回收的话,这块从堆内存是一直存在。在讨论中,有同事提醒说,在进程结束后,new操作的内存会被回收。但也只是结论,也说不出具体理由。      没关系,何不google一下,一查下去
计算机中的内存对齐以及内存的堆栈分配原理
在大多数低层程序设计中,由于内存分配与内存对齐问题所带来的bug所占比重非常大。本文对内存分配中的分配空间类型、作用、方法、适用范围、优缺点以及内存对齐问题中的对齐原因、对齐规则等进行了详细的说明,并结合大量c语言代码进行阐述与分析。 [关键词] 内存分配;堆栈原理;内存对齐;   1 引言 操作系统的内存分配问题与内存对齐问题对于低层程序设计来说是非常重要的,对内存
java多线程内存可见性
一、java多线程   JAVA多线程实现的三种方式: http://blog.csdn.net/aboy123/article/details/38307539 二、内存可见性 1、什么是JAVA 内存模型 共享变量 :如果一个变量在多个线程工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 Java Memory
主队列-异步执行;主队列-同步执行(死锁)
主队列-同步执行死锁问题
线程结束资源释放
线程创建时,系统会分配给线程一些资源,我们可以看到的就是线程描述符,线程堆栈,在系统内部还会有更复杂的系统维护一些信息,在线程创建时,内核总会为其维护一些资源,比较理想的情况是线程运行结束后,释放系统资源和进程资源,包含线程返回值占用的内存线程堆栈,寄存器状态等等,以备后来者的使用. 线程执行结束后释放资源的三种方法:   利用这些方法,我们可以避免线程退出时,系
在主线程的handler里开子线程线程会卡主
实现一个在2s双击返回键就退出程序的功能,将延迟放到了handler中。public void onBackPressed() { Log.i("isfinish",""+is_Finish); if(is_Finish == 0){ Toast.makeText(this,"再按一次返回键退出",Toast.LENGTH_SHORT).sho
GCD之主队列、全局并发队列、以及同步任务的执行
主队列:专门负责在主线程上调度任务,不会在子线程上调度任务,在主队列不允许开新线程。 主队列的特点:只在主线程运行,不开新线程。 异步执行:会开新线程,在新线程执行。 异步执行特点:不需要马上执行。 异步主队列:不会开辟新线程,只在主线程上顺序执行。 异步主队列的特点:主队列上的任务不会马上执行而是只把任务放到主队列,等线程有空时才去执行。 同步执行特点:不会开辟新线程,会马上执行。
linux进程退出,线程资源用pthread_detach释放
linux下,用pthread_create创建线程后,线程的默认状态为joinable,如果程序退出,线程没被join,则会有线程的资源没有被释放。 调用pthread_join可以,但是程序会再调用该函数后阻塞住。 替代的调用pthread_detach,该函数可立即返回,有2种方法。 1:子线程里调用:pthrad_detach(pthread_self()); 2:父线程里调用:p
线程读取同一个内存数据会出错吗
线程是否可以同时读取同一内存变量? 多线程是否可以同时读取同一内存变量?只是对他进行读取不进行写入修改 那么在多线程中是否会因此而出错? itljl 2012-12-23 00:14 读可以,修改不可以。 华玉欣 2012-12-23 02:40
并发时的主内存工作内存
-
关于GCD中同步函数+主队列产生死锁的一点理解
首先看个产生死锁的代码 -(void)sysncMain{ //获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"start"); //同步函数 dispatch_sync(queue, ^{ NSLog(@"------ %@",[NSThread currentT
有关QTimer线程安全的探讨
第一、QTimer 不是线程安全的,但它是可重入的。所以在多线程程序中的线程中使用是没有问题的。 第二、所谓的可重入就是类里面没有静态的变量 第三、Qt中所谓线程安全就是考虑了多线程下修改变量的操作问题 第四、QTimer对象在哪个线程中执行的new操作,那么这个对象就属于哪个线程,所以该对象的start、stop、还有析构操作也只能在当前线程中执行。如果程序有需要的话,比如其他的线程要对当
我们是很有底线的