「管程java」管程和壳程区别图
今天给各位分享管程java的知识,其中也会对管程和壳程区别图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中一个对象可以有几个管程?
- 2、在操作系统中怎么理解:"管程是被进程调用的,管程是语法范围,无法创建和撤销"。
- 3、有哪些Java web里的并发框架,都有哪些?
- 4、什么叫壳程,管程?都是干什么用的?
java中一个对象可以有几个管程?
所有的对象中只有一个管程。如果使用的是同一个锁的也就是对象的锁,都会被阻塞。你可以尝试下,在两个非静态方法上加上同步关键字。在管程对象里有一个锁的对象状态,会标识当前的锁的使用次数,+1或者-1。还有好像只有是重量级锁的时候才会使用管程吧
在操作系统中怎么理解:"管程是被进程调用的,管程是语法范围,无法创建和撤销"。
谈谈我自己的理解。
管程是由一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块。
上面这段定义来自王道书,可以看出,管程=软件模块。
什么是软件模块?类比地看,相当于java中的抽象类,比如streamreader类等等。这些抽象模块定义了数据该怎么用,数据的名字叫什么,但是没有把数据直接放进去,因此说管程是语法范围。你可以把管程当工具去使用,但是不能创建和撤销管程。再通俗点讲,管程相当于一个函数。你传入参数(给管程设置打印机初值),然后你就可以使用它提供的功能(read,write操作)。这种调用过程是由进程实现的,但是调用≠创建或撤销。在java中,你可以new一个实例,但总不能new一个抽象类吧?这是一个道理
有哪些Java web里的并发框架,都有哪些?
一、并发是一种需求,以下先介绍一下javaweb对于高并发的处理思路:
1、synchronized 关键字
可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。可能锁对象包括: this, 临界资源对象,Class 类对象
2、同步方法
同步方法锁定的是当前对象。当多线程通过同一个对象引用多次调用当前同步方法时, 需同步执行。
3、同步代码块
同步代码块的同步粒度更加细致,是商业开发中推荐的编程方式。可以定位到具体的同步位置,而不是简单的将方法整体实现同步逻辑。在效率上,相对更高。
A)锁定临界对象
同步代码块在执行时,是锁定 object 对象。当多个线程调用同一个方法时,锁定对象不变的情况下,需同步执行。
B)锁定当前对象
4、锁的底层实现
Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现。同步方法 并不是由 monitor enter 和 monitor exit 指令来实现同步的,而是由方法调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的。
5、锁的种类
Java 中锁的种类大致分为偏向锁,自旋锁,轻量级锁,重量级锁。
锁的使用方式为:先提供偏向锁,如果不满足的时候,升级为轻量级锁,再不满足,升级为重量级锁。自旋锁是一个过渡的锁状态,不是一种实际的锁类型。
锁只能升级,不能降级。
6、volatile 关键字
变量的线程可见性。在 CPU 计算过程中,会将计算过程需要的数据加载到 CPU 计算缓存中,当 CPU 计算中断时,有可能刷新缓存,重新读取内存中的数据。在线程运行的过程中,如果某变量被其他线程修改,可能造成数据不一致的情况,从而导致结果错误。而 volatile 修饰的变量是线程可见的,当 JVM 解释 volatile 修饰的变量时,会通知 CPU,在计算过程中, 每次使用变量参与计算时,都会检查内存中的数据是否发生变化,而不是一直使用 CPU 缓存中的数据,可以保证计算结果的正确。
更多、此外还有很多细节需要通过学习去了解和完善,此处就不一一列举了。
二、并发框架
并发框架很多,如ExecutorService、RxJava、Disruptor、Akka等,具体选择哪个(或者都不选择)是根据项目需求选择的,框架本身的差异并不大,基本都是如下模式
什么叫壳程,管程?都是干什么用的?
壳程是指流体沿换热器的壳体、管束和档板之间的空隙自左至右(或自右至左)所流经的距离。
管程在功能上和信号量及PV操作类似,属于一种进程同步互斥工具,但是具有与信号量及PV操作不同的属性。
管程封装了同步操作,对进程隐蔽了同步细节,简化了同步功能的调用界面。用户编写并发程序如同编写顺序(串行)程序。
扩展资料:
管程的属性:
共享性:管程可被系统范围内的进程互斥访问,属于共享资源
安全性:管程的局部变量只能由管程的过程访问,不允许进程或其它管程直接访问,管程也不能访问非局部于它的变量。
互斥性:多个进程对管程的访问是互斥的。任一时刻,管程中只能有一个活跃进程。
封装性:管程内的数据结构是私有的,只能在管程内使用,管程内的过程也只能使用管程内的数据结构。进程通过调用管程的过程使用临界资源。管程在Java中已实现。
参考资料来源:百度百科-管程
参考资料来源:百度百科-壳程
关于管程java和管程和壳程区别图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。