综述:下面写的是我学习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的更多相关文章

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

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

  2. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  3. java线程内存模型,线程、工作内存、主内存

    转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...

  4. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  5. java线程管理

    java线程管理 参见: http://harmony.apache.org/subcomponents/drlvm/TM.html 1. 修订历史 2. 关于本文档 2.1. 目的 2.2. 面向的 ...

  6. Java线程池使用和分析(一)

    线程池是可以控制线程创建.释放,并通过某种策略尝试复用线程去执行任务的一种管理框架,从而实现线程资源与任务之间的一种平衡. 以下分析基于 JDK1.7 以下是本文的目录大纲: 一.线程池架构 二.Th ...

  7. Java线程池使用和分析(二) - execute()原理

    相关文章目录: Java线程池使用和分析(一) Java线程池使用和分析(二) - execute()原理 execute()是 java.util.concurrent.Executor接口中唯一的 ...

  8. Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理

    相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...

  9. 如何创建并运行java线程

    本文转载地址:            http://ifeve.com/creating-and-starting-java-threads/ Java线程类也是一个object类,它的实例都继承自j ...

  10. Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理

    相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...

随机推荐

  1. CodeReview of JDK Source Code

    jdk1.6.0_35/src.zip, only java package is reviewd(full package review caused a OutofMemory on java h ...

  2. SpringBoot开发一

    项目介绍 牛客高级项目课,主要是完成牛客网的讨论社区的搭建.项目在github上. 涉及到的技术架构: Spring,SpringBoot,SpringMVC,MyBatis,Redis,Kafka( ...

  3. 使用PageFactory类封装页面元素,并实现简单的登录

    1.新建页面对象类LoginPage import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; impo ...

  4. Sqli-Labs less46-53

    less-46 前置基础知识: select * from users order by 1 desc ;使用降序(倒序)排列 select * from users order by 1 asc ; ...

  5. NOIP 模拟 $33\; \rm Connect$

    题解 状压 \(\rm DP\). 从 \(1\) 到 \(n\) 一共只要一条路径,那么就是一条链,只要维护一个点集和当前链的末尾就行. 设 \(\rm dp_{i,j}\) 为 \(i\) 的点集 ...

  6. 题解 God Knows

    传送门 这里有个线段树维护单调栈的神仙技巧 同机房dalao @Yubai的不同理解方式 yysy,我考场上连\(n^2\)的暴力都没搞出来 这里实际上求的是最小权极大上升子序列 但这个跟题目几乎没什 ...

  7. Maven在IDEA中的日常使用

    1.为什么使用MavenMaven是我们在开发过程中常用的工具,主要用途有两种:1)方便的下载jar包2)项目打包接下来以windows操作系统为例,介绍一下Maven在IDEA中如何设置和常用的功能 ...

  8. 【AIOT】智能感知--人

    From: https://liudongdong1.github.io/ 1. 人体存在感知 目标:检测环境中的所有人体,标记出每个人体的坐标位置:不限人体数量,适应中低空斜拍.人体轻度遮挡.截断等 ...

  9. redis如何实现分布式锁?

    1.使用redis中的自增来实现 2.使用setnx + del # 如果不存在set(返回1),如果存在则失败(返回0) 为了避免死锁会加上一个过期时间 自增方式 boolean isSelf = ...

  10. 如何快速排查发现redis的bigkey?4种方案一次性给到你!

    本篇文章将以redis的bigkey为主题进行技术展开,通过从认识redis的高性能,bigkey的危害.存在原因.4种解决方案,到模拟实战演练的介绍方式,来跟大家一起认识.探讨和学习redis. 先 ...