综述:下面写的是我学习java线程时做的一些笔记和查阅的一些资料总结而成。大多以问答的形式出现。

一、什么是线程?

答:线程是一个轻量级的进程,现在操作系统中一个基本的调度单位,而且线程是彼此独立执行的,线程从本质上来说是数据的一次运行活动,是操作系统分配资源和调度的一个单位。java中的线程是运行在进程内的,就像jvm其实是一个java进程。调用线程的方式有协同式,抢占式。

进程和进程之间资源是不可共享的,例如我们用一个进程打开一个world文档,第二个进程也许能够查看它,但是不能更改,有时连查看也不能查看,这种情况在windows操作系统中很常见,比如打开一个world,又想删除这个world就会提示这个文件已经被占用,是不能删除的,这是进程一个非常大的特点,它的资源是独享的,相互之间不可以共享。

而线程运行在进程的内部,凡是这个进程占用的资源,那么线程和线程之间是可以共享的,,那么就会形成线程和线程之间相互去访问,同一个资源的状况,发生一些平时遇不到的事情,java的jvm中后台日志,其实就是多个线程交替去写的,这就是在进程内部资源共享的一个例子之一,当然端口号也是,tomcat监听的是8080端口号,http请求返回后,就会启动一个线程,其实是有一个线程一直在监听它,其实是可以形成一个资源共享的情况,但是事实上,如果第二tomcat监听同一个端口号,这个时候就会报错。

线程其实挺耗费资源的,

线程会有上下文切换:即使是在单核cpu也支持多线程的,cpu通过给每个cpu分配时间片来实现这个机制。时间片是cpu分配给各个线程的时间,因为时间非常短,所以cpu通过不    停的切换线程执行,时间片一般是几十毫秒,cpu通过时间片分配算法来执行任务,一个时间片后,会切换到下一个任务,但是在切换时会保存上一个任务的状态,从任务保存到再加载的过程就是一次上下文切换,上下文切换,就像读书时,停止读书后,记下停止读的位置,又从新从那读会影响多线程的执行速度。

内核态:cpu通过访问内存所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。

用户态:只能受限的访问内存,并且不能访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

转载于:https://www.cnblogs.com/dslnn/p/8858740.html

java线程day-01相关推荐

  1. Java并发编程(01):线程的创建方式,状态周期管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序 ...

  2. 面试:为什么 Java 线程没有Running状态?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | my.oschina.net/goldenshaw/bl ...

  3. 为什么 Java 线程没有 Running 状态?一下被问懵!

    什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNNABLE状态? Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状 ...

  4. java线程池队列场景,Java面试题汇总

    01 并发宝典:面试专题 面试专题分为四个部分,分别如下 Synchronized 相关问题 可重入锁 ReentrantLock 及其他显式锁相关问题 Java 线程池相关问题 Java 内存模型相 ...

  5. 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份

    摘要 开发者有时创建的多线程程序会生成错误值或产生其它奇怪的行为.古怪行为一般出现在一个多线程程序没使用同步连载线程访问关键代码部份的时候.同步连载线程访问关键代码部份是什么意思呢?在这篇文章中解释了 ...

  6. java 线程状态_Java线程为何没有Running状态?我猜你不知道。

    作者:国栋原文:https://my.oschina.net/goldenshaw/blog/705397 Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言, ...

  7. 为什么 Java 线程没有 Running 状态?

    Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...

  8. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  9. java线程runnable_Java 线程状态之 RUNNABLE

    在上一篇我们粗略谈到了 Java 的6种线程状态,并对其中较为简单的 NEW 和 TERMINATED 做了分析,现在我们具体来看下 State.RUNNABLE状态,即所谓的可运行状态.(以下简称 ...

  10. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

最新文章

  1. 本地如何使用phpstudy环境搭建多站点
  2. Python之几种常用模块
  3. nvidia显卡对比分析
  4. 学java要算法吗_学习java不可不知的几种算法
  5. Ruby on Rails开发Web应用的基本概念
  6. tengine php环境,CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
  7. Blob URL 是什么?
  8. 改进我个人知识管理手段
  9. so(3) se(3) optimization
  10. android框架连接mysql_三层架构 android访问MSSQL数据库 程序 (服务器端)
  11. 全局变量不能放在头文件其中
  12. Cocos Creator 实现虚拟摇杆
  13. 服务器ssd硬盘格式化,ssd固态硬盘格式化教程
  14. 梅科尔工作室-OpenEuler培训第二讲笔记
  15. 数据分析师职业规划——数据分析师的职业焦虑与未来发展
  16. kata-containers对接firecracker
  17. 2500个常用汉字(用来练普通话的)
  18. 传奇怎么设置不显示服务器,如何将传奇服务器未知神殿地图修改为不限制进出...
  19. .csd文件怎么读?--CMU_MOSI_Opinion_Labels.csd
  20. 傅里叶变换的理解-从正弦信号到傅里叶

热门文章

  1. hihoCoder 1175 拓扑排序
  2. 就在这段时间让自己充实起来
  3. Freeview%20Play是什么
  4. 新来的领导把我的职务免掉了,一年后,我要不要找领导聊聊?
  5. 你读过的最心酸的句子有哪些?
  6. 揭开发家致富的2个途径
  7. Prometheus is an open source monitoring
  8. JavaWeb项目中解决中文乱码方法
  9. sql server的搜索_在SQL Server中进行全文本搜索
  10. 人人都是产品经理1.0