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 ...
随机推荐
- miniFTP项目实战五
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- luoguP1528&2329 栅栏&切蛋糕
前言 蒟弱本来是在亿万年前做二分答案专题栅栏的,由于数据水所以过掉了,后来发现有一个数据加强版,也就是本题,于是爆T了...过了有个五六个月回来填坑了...现在开O2是在最优解第一个(自豪ing 题目 ...
- SSM自学笔记(五)
10.MyBatis入门操作 1.MyBatis的简介 1.1 原始jdbc操作(查询数据) 1.2 原始jdbc操作(插入数据) ##### 1.3 **原始**jdbc操作的分析 原始jdbc开发 ...
- Centos7上yum安装mongodb(安装epel中的版本可能会比较老)
yum install epel-release 搜索mongodb-server 安装mongodb yum install mongodb-server.x86_64 配置mongodb vim ...
- 寻找写代码感觉(三)之使用 Spring Boot 编写接口
一.前言 项目配置完之后,接着就是写接口了,那咱们就开始吧. 二.项目配置补充知识点 上篇文章写的是关于项目属性配置的一些知识,这里针对上次遗忘内容进行补充如下: 2.1.获取配置文件的值 在appl ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- dubbo暴露原理及引用过程
服务暴露 服务引用:
- Ant的使用(一)
<?xml version="1.0" encoding="UTF-8"?> <project name="projectName& ...
- java实现全排列输出
java实现全排列输出 转自:http://easonfans.iteye.com/blog/517286 最近在找工作,面试java程序员或者软件工程师,在笔试的时候常常见到这么一道题:全排列 的输 ...
- CentOS7部署SSH服务
1 ssh服务部署 输入命令 yum list | grep ssh 查看可安装的软件包,选择openssh-service.x86_64 输入下面命令进行安装openssh服务 yum instal ...