Java线程

转载 2016年05月31日 09:43:43

每当启动一个新线程的时候,Java虚拟机都会为它分配一个java栈。java以栈帧为单位保存线程的运行状态。虚拟机只会对java栈执行两种操作:以栈帧为单位的压栈或者出栈。

java方法可以通过两种方式完成,一种通过return返回,成为正常返回;一种通过抛出异常而异常终止 。虚拟机都会将当前栈弹出java栈然后释放掉,这样上一个方法的栈帧就是当前栈帧了。

java栈上是此对应的java线程所私有的。因此不存在多线程情况下栈数据访问同步的问题。

栈帧

栈帧由三部分组成:局部变量区,操作数栈和帧数据区。 局部变量区和操作数栈要视对应的方法而定,它们是按照字长计算的。

局部变量区: java栈帧的局部变量区被组织为一个以字长为单位,从0开始计数的数组。字节码指令通过从0开始的索引来使用其中的数据。类型为int,float,reference和returnaddress的值在数组中只占一项,而类型为byte,short和char的值在存入数组前都将被转换为int。但是long和double类型在数组中却占据连续的两项。

操作数栈和局部变量区一样。也被组织成一个以字长为单位的数组。但是不是通过索引来访问,而是通过标准栈操作–压栈和出栈来访问。

不同于程序计数器,java虚拟机没有寄存器,程序计数器也无法被程序指令直接访问。java虚拟机是由操作数栈而不是从寄存器中取得操作数的,因此它的运行方式是基于栈的而不是基于寄存器的。

虚拟机把操作数栈作为它的工作区–大多数指令都要从这里弹出数据,执行运算,然后把结果压回操作数栈。

如何终止java线程

终止线程的三种方法      有三种方法可以使终止线程。      1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。      2.  使用stop方法强行终...
  • anhuidelinger
  • anhuidelinger
  • 2013年09月16日 19:51
  • 160075

linux下查看Java线程

为了方便我下次查找所以写了 这个博客记录下别人的 以下是别人的链接 http://www.jiacheo.org/blog/279 https://www.zhihu.com/questi...
  • u013086392
  • u013086392
  • 2017年01月29日 16:39
  • 3156

Java与线程

揭开java线程和操作系统线程之间的神秘面纱
  • lingdudebing
  • lingdudebing
  • 2016年03月08日 03:21
  • 480

Java垃圾回收无效线程吗?

测试结果表明:线程在无效之后,GC会回收无效线程,参考附图由原先的18个线程编程12个线程 测试代码: public class ThreadTest { public static v...
  • tomli2017
  • tomli2017
  • 2017年04月16日 17:18
  • 668

java四种线程的使用

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 new...
  • w_wensan
  • w_wensan
  • 2017年04月12日 14:31
  • 512

java 线程1 线程分类

java线程分两类:          守护线程和用户线程。 用户线程:          是用户创建的一般线程,如继承Thread类或实现Runnable接口等实现的线程。 ...
  • duzhe1991
  • duzhe1991
  • 2016年12月05日 09:48
  • 705

java中线程的基本操作!

java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口. 1.继承Thread public class MyThread extends Thread{ ...
  • kkkkkxiaofei
  • kkkkkxiaofei
  • 2013年10月11日 16:44
  • 1866

Java并发编程番外篇(一)如何结束一个线程

本篇博客介绍下如何结束一个线程。在Java 的设计中,当一个线程的run方法中代码执行结束后,该线程就自动结束了。但是,在我们的实际开发过程中,可能会需要手动的结束一个线程,此时我们应该怎么安全地结束...
  • u014088294
  • u014088294
  • 2016年08月12日 08:37
  • 633

Java最佳线程数

对于计算密集型任务,在拥有Ncpu个处理器的系统上,当线程池大小为N+1时,通常能实现最优的利用率,(即当计算密集型任务偶尔由于页缺失故障或者其他原因而暂停时,这个额外的现线程也能够确保CPU的时钟周...
  • cloudeagle_bupt
  • cloudeagle_bupt
  • 2017年04月05日 16:26
  • 784

java线程常用方法详解

1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注...
  • nan167567
  • nan167567
  • 2016年08月01日 19:57
  • 4272
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java线程
举报原因:
原因补充:

(最多只允许输入30个字)