首页 > 编程语言 >Java并发基础知识

Java并发基础知识

时间:2023-03-11 16:57:09浏览次数:29  
标签:状态 Java PC 基础知识 并发 线程 上下文 资源

进程与线程

进程,程序的一次执行过程,系统运行程序的基本单位。

启动main函数,即启动JVM的一个进程,mian函数为其主线程。

同类多个线程共享进程的堆和方法区资源,切换工作负担比进程小。

一个Java程序的运行时main线程和多个其他线程同时运行。

各个进程是独立的,但各个线程不一定,同一进程中线程会相互影响,线程执行开销小,但不利于资源的管理和保护。

线程私有:PC,虚拟机栈,本地方法栈

PC:改变PC读取指令,实现代码流程控制(字节码解释器);记录当前线程执行的位置(多线程)

native方法,记录undefined地址,Java代码,下一条指令的地址

PC线程私有,便于线程切换后恢复到正确位置

虚拟机栈:Java方法,栈帧在虚拟机栈出入栈

本地方法栈:Native方法,本地方法栈初入栈

保证线程中局部变量不被其他线程访问

堆和方法去(线程共享):

堆:存放新创建对象;方法区;存放类信息等

多线程好处:

线程切换和调度成本低,减少了上下文切换的开销;多个同类线程之间的资源竞争较小,任务执行效率提高

多线程带来的问题:

前文所讲,线程执行开销小,但不利于资源的管理和保护,内存泄漏,死锁,线程不安全(之后可详细讨论)

线程生命周期和状态:

只有六种,NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING,TERMINATED,记忆时可以根据英文名称记忆

注意区分阻塞状态和等待状态。

RUNNABLE状态中包括运行中与就绪状态,当就绪状态的线程获得时间片后变称为运行状态(因时间分片粒度很小,因此不做状态区分了。

等待状态的线程需要依靠其他线程的通知才能够返回运行态,而超时等待的线程超过设置的时间后会自行返回到RUNNABLE状态;阻塞状态与锁有关,锁也是JAVA并发中的难点重点,后文会提及。

上下文切换:

上下文:线程执行过程中的运行条件和状态(PC,栈信息等)

线程切换上下文时需保留当前线程的上下文(当线程下次占用CPU时恢复现场),加载下一个将要占用CPU的线程的上下文

保存信息回复信息会占用CPU和内存资源,影响效率

线程死锁:

多个线程同时被阻塞,等待资源的释放,且占据着他们持有的资源(资源只能被一个线程占用)不释放(别的线程无法强行剥夺),形成了一种循环等待资源的关系

预防避免线程死锁:

破坏线程死锁的条件(一次性申请所有资源,主动释放占有的资源,按照某一顺序申请资源(银行家算法))

 

标签:状态,Java,PC,基础知识,并发,线程,上下文,资源
From: https://www.cnblogs.com/WZXwzx/p/17206262.html

相关文章

  • Java内存模型:Java解决可见性和有序性问题的方案
    Java内存模型并发场景下,可见性/原子性/有序性是并发编程Bug源头,而Java内存模型解决了可见性和有序性问题。Java内存模型定义可见性问题原因是缓存,有序性问题原因是编译......
  • Java基础之并发——CAS操作
    CAS操作的内存地址V,旧的预期值A,即将要更新的目标值B的获取顺序是:首先,读取内存地址V的值;然后,读取旧的预期值A的值;最后,读取即将要更新的目标值B的值。CAS操作是原子性的,因......
  • Java流程控制
    Scanner对象Java给我们提供了这样一个工具类,我们可以获取用户的输入。我们可以通过Scanner类来获取用户的输入Scanners=newScanner(System.in);通过Scanner类的......
  • Java运行程序占用CPU100%故障排查
          通过进程查线程,查看线程是否正常                 ......
  • 使用AidLux在安卓手机上搭建一个java服务器
    背景我有一部旧手机,功能完好,后盖碎了,卖不了几个钱,但是12G的内存512G的空间让我舍不得丢,作为一个程序员,平常也会写一点demo玩玩,就想着拿这部旧手机当作一台服务器使用。Ai......
  • 并发编程-进程
    进程线程线程和进程的区别进程间通讯管道消息队列信号量共享内存套接字消息队列和管道的区别没有行动,懒惰就会生根发芽。没有梦想,堕落就......
  • JavaDoc文档注释
    JavaDoc文档注释/***@authorhuangjilin*@version1.0*@since1.8*///类注释publicclassDoc{Stringname;/**......
  • Java基础 - 基本数据类型,基本数据类型之间的运算规则,引用数据类型
    基本数据类型:1.整数类型 类型:byte,short,int,long字节:byte1字节,short2字节,int4字节,long8字节容量:byte-128~127,short-3万~3万左右,-20亿~20亿左右,long特别大默认字......
  • Java基础之并发——线程的生命周期和状态
    Java线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态:NEW:初始状态,线程被创建出来但没有被调用start()。RUNNABLE:运行状态,线程被调用......
  • java三层架构
    (68条消息)三层架构、面向接口编程_一个很懒的人的博客-CSDN博客......