三分钟让你简单了解Thread线程

开天辟地

最近一段时间在工作中感觉到乏力,想想之前所学的只是几乎都忘得差不多了,现在的工作无非就是copy,感觉已经毫无技术可言,更多的是要了解业务层面的东西了,最近还算悠闲,所以想再捡起书本学习一下,就从多线程开始入手!

首先我们需要认识三个知识点JVM内存结构,JAVA内存模型和JAVA对象模型,这三个概念是完全不同的表现形式,JVM内存结构和JAVA虚拟机的运行时区域变化有关,JAVA内存模型和JAVA的并发编程有关,JAVA对象模型和JAVA对象在虚拟机中的表现形式有关.所以这三点要区分开.

因为是多线程所以在这里我们只了解一下JAVA内存模型,其他两个内容有兴趣的可以自行查阅一下.

JAVA内存模型

堆内存和方法区是每个线程共享的数据区域.每个线程都可以操作对内存和方法区中的数据,JAVA的线程间通讯通过共享区域进行通讯.程序计数器和栈内存和本地方法栈是线程私有的区域,没创建一个线程同样会创建.
JAVA内存模型(JAVA Memory Model JMM) 并不像JVM内存结构一样真实存在的,而是一个抽象的概念,它描述了一组规范或规则,一个线程对共享区域的数据进行操作时是需要遵循这个规则的,线程在对数据进行操作时会存在一些可见性,原子性和顺序性的规则问题,JMM是围绕着多线程通讯即一些特性而建立的一种模型.
在这里插入图片描述

Thread与虚拟机栈

在线程中程序计数器是比较小的一块内存,而且该部分是不会存在任何溢出的异常,与线程创建,运行,销毁等关系密切的是虚拟机栈内存,而且虚拟机栈内存的大小决定了一个JVM进程中可以创建多少个线程.
其实这个很容易理解,因为虚拟机栈内存是线程私有的,所以每创建一个线程都会占用一些内存.我们可以粗略的认为一个JAVA进行的内存大小为:堆内存+线程数*栈内存

从上边可以看出可创建线程数量和虚拟机栈内存成反比,那么与堆内存又有什么关系呢?当然也是成反比,只不过堆内存为基数,而栈内存为系数罢了.但是堆内存对线程数量的影响不会那么明显不会那么直接.
线程数量=(最大地址空间-JVM堆内存-JVM本地内存/线程栈的大小)

守护线程

守护线程是一种比较特殊的线程,一般用于处理一些后台的工作,比如JDK的垃圾回收线程,守护线程的作用是什么?首先我们需要了解JVM程序在什么情况下才会退出.在JVM程序中没有一个非守护线程,程序就会正常退出,而不是调用System.exit()方法.

守护线程具备自动结束生命周期的特性,而非守护线程不具备这种特性,如果没有守护线程,可以试想一下如果main线程完成了工作,则JVM程序无法退出,因为JVM垃圾回收线程还在正常工作.

守护线程经常用作与执行一些后台的任务,因此它们有时被称为后台线程,当你希望关闭某些线程的时候,或者退出JVM进程的时候,一些线程能够自动关闭,此时就可以考虑用守护线程为你完成这样的工作!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值