综述:下面写的是我学习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. Tomcat进程意外退出的问题分析

    http://ifeve.com/why-kill-2-cannot-stop-tomcat/?tdsourcetag=s_pctim_aiomsg tail后关掉客户端 正常执行shutdown.s ...

  2. Java JVM【笔记】

    Java JVM[笔记] Java的平台无关性是如何实现的? Java源码首先被编译成字节码,再由不同的平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字 ...

  3. Maven 下载、安装与配置

    一.需要准备的东西 确定电脑上已经成功安装JDK 二.下载与安装 1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 注意:Maven3. ...

  4. 数据结构与算法-排序(九)基数排序(Radix Sort)

    摘要 基数排序是进行整数序列的排序,它是将整数从个位开始,直到最大数的最后一位截止,每一个进位(比如个位.十位.百位)的数进行排序比较. 每个进位做的排序比较是用计数排序的方式处理,所以基数排序离不开 ...

  5. ReentrantReadWriteLock(读写锁)

    为了提高性能,java提供了读写锁, 读锁: 在读的地方使用读锁,可以多个线程同时读. 写锁: 在写的地方使用写锁,只要有一个线程在写,其他线程就必须等待 例子: public static Read ...

  6. C#多线程实践-锁和线程安全

    锁实现互斥的访问,用于确保在同一时刻只有一个线程可以进入特殊的代码片段,考虑下面的类: class ThreadUnsafe { static int val1, val2; static void ...

  7. C++ 矩形交集和并集的面积-离散化

    //离散化,x,y坐标分别按从小到大排序 //离散化 //1.首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中. //2. 设数组XY[ ][ ].对于每个矩形(x1,y1)(x2 ...

  8. uwp 之后台音频

    C# code 后台任务 ---------------------------- public sealed class BgTask : IBackgroundTask { #region 私有字 ...

  9. 11.SpringMVC之HttpMessageConverter

    HttpMessageConverter简介 HTTP 请求和响应的传输是字节流,意味着浏览器和服务器通过字节流进行通信.但是,使用 Spring,controller 类中的方法返回纯 String ...

  10. Javascript - 异步操作和读取文件

    node.js读取文件 node.js内置了异步读取文件的模块,可以很方便地读取文件的数据.先创建三个txt文档,在根目录下创建一个readFile.js 输入以下代码,然后在vscode的终端中输入 ...