java线程day-01
综述:下面写的是我学习java线程时做的一些笔记和查阅的一些资料总结而成。大多以问答的形式出现。
一、什么是线程?
答:线程是一个轻量级的进程,现在操作系统中一个基本的调度单位,而且线程是彼此独立执行的,线程从本质上来说是数据的一次运行活动,是操作系统分配资源和调度的一个单位。java中的线程是运行在进程内的,就像jvm其实是一个java进程。调用线程的方式有协同式,抢占式。
进程和进程之间资源是不可共享的,例如我们用一个进程打开一个world文档,第二个进程也许能够查看它,但是不能更改,有时连查看也不能查看,这种情况在windows操作系统中很常见,比如打开一个world,又想删除这个world就会提示这个文件已经被占用,是不能删除的,这是进程一个非常大的特点,它的资源是独享的,相互之间不可以共享。
而线程运行在进程的内部,凡是这个进程占用的资源,那么线程和线程之间是可以共享的,,那么就会形成线程和线程之间相互去访问,同一个资源的状况,发生一些平时遇不到的事情,java的jvm中后台日志,其实就是多个线程交替去写的,这就是在进程内部资源共享的一个例子之一,当然端口号也是,tomcat监听的是8080端口号,http请求返回后,就会启动一个线程,其实是有一个线程一直在监听它,其实是可以形成一个资源共享的情况,但是事实上,如果第二tomcat监听同一个端口号,这个时候就会报错。
线程其实挺耗费资源的,
线程会有上下文切换:即使是在单核cpu也支持多线程的,cpu通过给每个cpu分配时间片来实现这个机制。时间片是cpu分配给各个线程的时间,因为时间非常短,所以cpu通过不 停的切换线程执行,时间片一般是几十毫秒,cpu通过时间片分配算法来执行任务,一个时间片后,会切换到下一个任务,但是在切换时会保存上一个任务的状态,从任务保存到再加载的过程就是一次上下文切换,上下文切换,就像读书时,停止读书后,记下停止读的位置,又从新从那读会影响多线程的执行速度。
内核态:cpu通过访问内存所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。
用户态:只能受限的访问内存,并且不能访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。
java线程day-01的更多相关文章
- Java并发编程(01):线程的创建方式,状态周期管理
本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序 ...
- Java线程的概念
1. 计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...
- java线程内存模型,线程、工作内存、主内存
转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- java线程管理
java线程管理 参见: http://harmony.apache.org/subcomponents/drlvm/TM.html 1. 修订历史 2. 关于本文档 2.1. 目的 2.2. 面向的 ...
- Java线程池使用和分析(一)
线程池是可以控制线程创建.释放,并通过某种策略尝试复用线程去执行任务的一种管理框架,从而实现线程资源与任务之间的一种平衡. 以下分析基于 JDK1.7 以下是本文的目录大纲: 一.线程池架构 二.Th ...
- Java线程池使用和分析(二) - execute()原理
相关文章目录: Java线程池使用和分析(一) Java线程池使用和分析(二) - execute()原理 execute()是 java.util.concurrent.Executor接口中唯一的 ...
- Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理
相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...
- 如何创建并运行java线程
本文转载地址: http://ifeve.com/creating-and-starting-java-threads/ Java线程类也是一个object类,它的实例都继承自j ...
- Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理
相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...
随机推荐
- .NetCore+OpenSSL实现Https
前言 最近,有时间研究了一下HTTPS安全通信的原理,感兴趣的同学可以看下上一篇博文深入理解Https如何保证通信安全 ,随即联想到近段时间开发的.NetCore项目,.NetCore API应用程序 ...
- JStorm:概念与编程模型
1.集群架构 JStorm从设计的角度,就是一个典型的调度系统,简单集群的架构如下图所示,其中Nimbus可增加一个备节点,多个Supervisor节点组成任务执行集群. 1.1.Nimbus Nim ...
- Prometheus alertmanager邮件发送+grafana告警展示
前言 前面一篇博客,我已经介绍了prometheus如何监控mysql. 这一篇我来介绍如何通过alertmanger进行告警邮件发送(微信或钉钉类似,因为需要企业帐户,我就不试了),以及如何通过gr ...
- Java MyEclipse:The type java.lang.CharSequence cannot be resolved. It is indirectly referen
从svn上下载项目后配置weblogic后启动报错: myeclipse The type java.lang.CharSequence cannot be resolved. It is indi ...
- MySQL约束条件 表关系建立 查询数据
约束条件 unsigned 无符号 即为非负数,用此类型可以增加数据长度 例如 tinyint最大范围是127,那tinyint unsigned 最大就可以到 127 * 2 通常用在不会出现符号的 ...
- vs code 调试angular2
调试步骤: 1.安装nodejs 2.安装vscode 3.vscode安装debugger for chrome插件 4.选择调试->打开调试配置,选择chrome配置,打开lauch.jso ...
- [转]C# 互操作性入门系列(一):C#中互操作性介绍
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- C#调用C++ dll中返回值为字符串的函数问题
C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...
- Python代码阅读(第1篇):列表映射后的平均值
本篇阅读的代码实现了将列表进行映射,并求取映射后的平均值. 本篇阅读的代码片段来自于30-seconds-of-python. average_by def average_by(lst, fn=la ...
- ASP.NET真分页_接前篇引用AspNetPager.dll进行数据分页
一.前端准备工作 1.之前我写到过<Asp.net中引用AspNetPager.dll进行数据分页> 这种分页方式只能在前台将数据分页,而每次点击查询时对目标数据库还是全查询,这样不仅会 ...