线程系列二:Thread构造函数

文章目录

  • 线程系列二:Thread构造函数
  • 前言
  • 一、new Thread
  • 二、与jVM
    • 1.与内存的关系
    • 2.线程创建的数量
  • 三、守护线程

前言

在我们开始学线程的时候新建一个线程用的什么?new Thread()相信大家都很熟悉,不知道大家有没有深入理解过这个函数

一、new Thread

有一下几个知识点:

  1. new Thread(“t1”) 可以传入一个参数作为线程的名字,如果没有会默以"Thread-"作为前缀递增

  2. 在线程是new状态时可以修改线程名字其他状态将不能修改

  3. jvm启动时会创建一个main线程,我们自己所创建的线程是由这个主线程进行创建。

  4. 3中说明我们的线程是有主线程创建,所有的线程都在主线程组中岂不是会不好分类,所以有线程组的概念,我们可以指定一个ThreadGroup.如果没有指定默认的就是父线程的线程组

  5. 线程是运行在虚拟机栈上的,所以线程的运行是跟它有关系的

  6. 线程的分类:守护线程、非守护线程的区别
    1 2 3 4作为知识点记忆即可,在源码中也很明显的看出来接下来着重看一下 5 6

二、与jVM

1.与内存的关系

内存分为程序计数器,虚拟机栈,本地方法栈,堆内存,方法区,java8元空间

  1. 程序计数器:其在JVM中所起到的作用就是用于存放当前线程接下来将要执行的信息。这个是属于 线程私有,因为为了能够在CPU时间片切换上下文能回到正确的位置执行,所以每个线程都需要一个独立的程序计数器。
  2. 虚拟机栈:与程序计数器类似他也是私有的。在线程中方法在执行的时候都会创建一个名为栈帧的数据结构。主要用于存放局部变量表 操作栈 动态链接方法出口等信息
  3. 本地方法栈:JVM中本地方法划分的内存区域同样也是私有的
  4. 堆内存:被所有线程共享存放的是java运行期间的的所有对象,常说的GC通常都是发生在这个地方
  5. 方法区:被所有线程共享存储已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
  6. java8元空间: 是在1.8之后提出这部分主要是替代了方法区中的持久内存,方法区在这之前被分为持久代和代码缓存区。所以同样他也是被所有线程共享

2.线程创建的数量

从1中不难看出线程的创建数量跟堆内存以及栈内存的大小有直接的关系
我们可以粗略的任务一个进程的内存大小为:堆内存+线程数量*栈内存
为什么要考虑这个问题呢?通常我们内存异常,高并发系统的承受能力的时候可以往这个方向考虑

三、守护线程

线程粗略的可以分为两种守护线程/非守护线程
这两个的主要区别在于:

  1. 守护线程的退出是如果没有非守护线程的时候就会自行退出,一般是用于我们的垃圾回收以及一些其他的后台的操作。
  2. 非守护线程的结束是由自己去控制,正常的结束自己的生命周期

使用以下代码就可以将自己的线程设置为一个非守护线程

thread.setDaemon(true);

以上通过阅读《JAVA高并发编程详解》汪文君著 所得的感悟

大家有兴趣也可以去了解一下

线程系列二:Thread构造函数相关推荐

  1. JavaFx系列(二) Thread顯示進度窗的對話框

    @FXML //2014-04-06 tim public void onClickOk(MouseEvent event) {//顯示進度窗proc.showit(Main.rb.getString ...

  2. java多线程构造函数_java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解...

    多线程与JVM内存结构的关系[了解]: 对于最后一个有疑问的构造中stackSize参数,其实学过编程滴人从参数字面就比较容易理解,栈大小嘛,这里从官方文档上来了解一下这个参数: 而之前在学习java ...

  3. 【转】java线程系列---Runnable和Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  4. WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

    对于一般的多线程操作,比如异步地进行基于文件系统的IO操作:异步地调用Web Service:或者是异步地进行数据库访问等等,是和具体的线程无关的.也就是说,对于这些操作,任意创建一个新的线程来执行都 ...

  5. JAVA面试常考系列二

    转载自 JAVA面试常考系列二 题目一 解释一下线程和进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调 ...

  6. linux线程篇,linux线程篇 (二) 线程的基本操作

    线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ex ...

  7. 日志框架LOG4J2系列二——log4j2配置文件

    日志框架LOG4J2系列二--log4j2配置文件 一.log4j2支持的配置文件格式 二.log4j2.xml配置文件 三.log4j2.xml配置项详解 总结 上一节:日志框架LOG4J2系列一- ...

  8. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  9. Python的进程和线程(二)——IO密集型任务

    一.什么是IO密集型任务? 主要的核心任务是进行IO操作,比如写文件,进行磁盘的读写等等. 上一篇博客,对计算密集型任务,多线程并没有体现它的好处,反而话费的时间更长.对IO密集型任务多线程会有明显的 ...

最新文章

  1. B - The Suspects POJ - 1611
  2. 用Kubernetes部署超级账本Fabric的区块链即服务(1)
  3. C#中导出百万级Excel只需几秒除了NPOI还可以这样
  4. 1.信号处理之:kill(),alarm(),pause()函数
  5. 《算法竞赛进阶指南》0.4二分
  6. 苹果新技术或让无线充电更便捷
  7. 两位小数乘两位小数竖式_人教版小学数学五年级上册小数乘整数公开课优质课课件教案视频...
  8. 白板推导系列Pytorch实现-感知机算法
  9. JavaWeb从入门到精通 二
  10. masm5安装教程_MASM 6.11的安装与设置
  11. STM32控制SG90舵机与超声波HC_SR04测距模块
  12. Halcon union_straight_contours_xld详解
  13. JavaScript (一) js的介绍及基本语法变量
  14. 论文阅读笔记《Meta-Transfer Learning for Few-Shot Learning》
  15. 【爬虫】哔哩哔哩校园招聘信息
  16. 最新版Jenkins 2.249.3的安装
  17. matlab死亡时间推测实验,尸检——关于死亡时间推测的基本手法及操作方式
  18. 幻读和不可重复读的区别
  19. 课程向:深度学习与人类语言处理 ——李宏毅,2020 (P10)
  20. 摸清股市规则,交易更安心

热门文章

  1. 嵌入式专业硕士论文写作(经验篇)
  2. 豆豆趣事[2014年01月]
  3. ubuntu下代理设置
  4. [数据库]MySQL索引原理和深度优化
  5. 谁不需要赚钱 -- 想,还要敢想
  6. java.lang.StackOverflowError 问题的排查和解决方案
  7. Java实现三个维度的跑马灯(数组)
  8. 单纯形表的简单方法。
  9. spring操作transactionManager
  10. mac 装oh my zsh