网上搜索了一下,关于java的线程栈: JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K. JVM的内存,被划分了很多的区域: (来源:http://www.iteye.com/topic/808550) 1.程序计数器 每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令. 2.线程栈 线程的每个方法被执行的时候,都会同时创建一个帧(Frame)用于存储本地变量表.操作栈.动态链接.方法出入口等信息.每一个方法的调用至完成,就意味着一个帧在VM栈中…
Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步,写一个类实现java.lang.Runnable;接口: 第二步,实现run()方法.结合以下代码来看. public class ThreadTest03{ public static void main(String[] args){   //创建线程   Thread t=new Thread(new Pro…
虚拟机栈(java stack) 百度图片搜索里的动图搜索功能不错,可以搜索一些动图,展示操作数栈的操作过程,比较形象.这点google差点意思 虚拟机栈(jvm stacks)是线程独占的 里面是多个栈帧(frame)或叫方法帧(class里的每个方法独占一个栈帧,所以也可以称之为方法帧) 每个栈帧里包含:局部变量区/操作数栈/动态链接/方法的返回地址 示例 文件SimpleExample.java 1 class SimpleExample { 2 public static void ma…
学习资料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现 同步是显式进行的.程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行. 1.多线程通信 1.1 内存模型 Java线程之间的通信由Java内存模型(JMM)控制,JM…
Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现 同步是显式进行的.程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行. 1.多线程通信 1.1 内存模型 Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见. 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程…
现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有独立的内存空间. 2.同一个进程中的线程共享其进程中的内存和资源. (共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的栈内存) 我们还需要了解以下基本内容: 1.什么是进程? 一个进程对应一个应用程序.例如:在Windows操作系统启动word就表示启动了一个进程.在Java开发环境下…
JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息.两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操作发生的相对顺序.共享内存的同步是显式的,消息传递的同步是隐式的,因为消息发送必须在消息接受之前,已经隐式包含了这个顺序关系 Java并发采用的是共享内存模型,内存模型的抽象结构如下图: 线程A和线程B通信的两个步骤: 线程A把本地内存中更新过的共享变量刷新到主内存中去 线程B去主内存中读取线程A之…
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; public class Ch09_Executor { private static void run(ExecutorService threadPool) { ; i < ; i++) { final int t…
在我们开始谈线程之前,不得不提下进程.无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等. 如果你也这样看的话,那么房子自己不会主动做任何事情,它是被动的对象. 而线程则像是房中的居住者,它是主动的对象——居住者要使用不同的房间.看电视.煮饭.洗澡等等. 房子占据着一块真实的土地,正像进程占据着内存. 而房子的居住者可以自由出入所有的房间,而进程中的线程也是类似的,可以自由访问任何进程占…
在我们开始谈线程之前,不得不提下进程. 无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等. 如果你也这样看的话,那么房子自己不会主动做任何事情,它是被动的对象. 而线程则像是房中的居住者,它是主动的对象--居住者要使用不同的房间.看电视.煮饭.洗澡等等. 房子占据着一块真实的土地,正像进程占据着内存. 而房子的居住者可以自由出入所有的房间,而进程中的线程也是类似的,可以自由访问任何进程…