精华内容
下载资源
问答
  • Java多线程之重入锁概念 ...​ 在java中,重入锁分为两种,即synchronized锁以及ReentrantLock及其实现。那么,什么是重入锁呢,其实重入锁就是一个线程能否获取一个已经由它自己持有的锁。...

    Java多线程之可重入锁概念

    一、什么是可重入锁

    ​ 在java中,可重入锁分为两种,即synchronized锁以及ReentrantLock及其实现。那么,什么是重入锁呢,其实重入锁就是一个线程能否获取一个已经由它自己持有的锁。如果可以,就是可重入锁,否则为不可重入锁。它的作用就是能够避免重复获取的时候出现死锁。

    二、demo

    1、synchronized

    public class ReentrantSynchronizer {
        public synchronized void print() {
            System.out.println(Thread.currentThread().getName());
            printf();
        }
    
        public synchronized void printf() {
            System.out.println(Thread.currentThread().getName());
            print();
        }
    
        public static void main(String[] args) {
            ReentrantSynchronizer reentrantSynchronizer = new ReentrantSynchronizer();
            for (;;){
                reentrantSynchronizer.print();
            }
        }
    }
    

    以上的demo就是测试synchronized的可重入性质,方法一中调用方法二,方法二又调用方法一,即结构类似于

    synchronized(this){
      synchronized(this){
        
      }
    }
    

    结果:

    main
    main
    main
    main
    main
    main
    ...
    

    证明synchronized是可重入锁


    2、UnReentrantLock

    ​ 这里用一个demo来模拟不可重入锁的特性,事实上,在JUC中都是重入锁。

    public class UnReentrantLock {
        private AtomicReference<Thread> owner = new AtomicReference<>();
    
        public void lock() {
            Thread current = Thread.currentThread();
            for (; ; ) {
                if (owner.compareAndSet(null, current)) {
                    System.err.println("EXIT");
                    return;
                }
            }
        }
    
        public void unlock() {
            Thread current = Thread.currentThread();
            owner.compareAndSet(current, null);
        }
    
        public static void main(String[] args) {
            UnReentrantLock unReentrantLock=new UnReentrantLock();
            unReentrantLock.lock();
            //unReentrantLock.unlock();
            //连续两次执行lock就会造成死锁
            unReentrantLock.lock();
    
        }
    }	
    

    ​ 上面我们可以看到,不可重入锁如果同一线程连续调用两次,就会造成死锁。

    3、ReentrantLock

    ​ 这是一个JUC的可重入锁,具体的demo 测试就交给你们去动手了,比较简单,连续两次lock看看就行。

    三、总结

    • 可重入锁、不可重入锁,针对的对象是同一线程。
    • 对于可重入锁,获取了该锁的线程可以重复获取该锁,不会造成死锁。
    • 而不可重入锁,获取该锁的线程再获取该锁的时候,会等待对方释放,造成死锁。
    展开全文
  • 基于重用编辑的网页视图概念视图:可以被重用的,编辑的,有显示界面的和已经实现了HTML独立功能模块的代码称为视图。我把视图分为4个部分:布局部分:用于表示自身所在界面中的位置。外观部分:被CSS控制的...

    基于可重用可编辑的网页视图概念

    视图:可以被重用的,可编辑的,有显示界面的和已经实现了HTML独立功能模块的代码称为视图。视图可以被非软件行业的用户使用,可能需要懂得一些网页的基本知识。

    我把视图分为4个部分:

    1. 布局部分:用于表示自身所在界面中的位置。
    2. 外观部分:被CSS控制的视图展示部分。
    3. 行为部分:由专业软件开发人员设计好的行为。比如表单的充值,提交等功能
    4. 数据部分:用于被视图显示的数据。

    以上4个部分都可以被编辑。

    展开全文
  • PCI bar 空间预取与不预取概念

    千次阅读 2011-03-10 09:56:00
    PCI BAR空间分为两类:IORESOURCE_IO(非预取)和IORESOURCE_MEM(预取),一般来说,对于BAR为寄存器空间,都要设置为IORESOURCE_IO;对于BAR为存储器空间,要设置为IORESOURCE_MEM;那么为什么要区分两种类型...

          PCI BAR空间分为两类:IORESOURCE_IO(非可预取)和IORESOURCE_MEM(可预取),一般来说,对于BAR为寄存器空间,都要设置为IORESOURCE_IO;对于BAR为存储器空间,要设置为IORESOURCE_MEM;

     

    那么为什么要区分两种类型的空间呢?

          所谓预取,重点在“取”字,这要从读取IO寄存器和RAM内存的区别来看。

     

     

     

    LDD3

     

    如果这个内存区被标识为可预取的, CPU 可缓存它的内容并且对它做所有类型的优化. 非可预取的内存存取, 另一方面, 不能被优化因为每次存取可能有边际效果, 就象 I/O 端口. 映射它们的寄存器到一个内存地址范围的外设声明这个范围是非可预取的, 而象在 PCI 板的视频内存的一些是可预取的.

     

    WEB SEARCH

     

    在一些应用中我们会遇到"可预取"内存的概念,可预取性是指存储器空间的可预取能力。如果读操作没有副作用(即如同从 RAM 中读数据一样不会破坏数据),则称存储器空间可预取。必要时可将字节写操作合并成一个双字写操作。可预取是读取一次以后不会改变读取地址和存储状态的任何改变,CPU 可缓存它的内容并且对它做所有类型的优化,.非"可预取"的内存就象FIFO地址影射到内存地址,读取数据以后会引起FIFO指针的改变.另外还象一些中断状态IO影射到内存,读取这个内存后,可能会清除中断标志等等,所以CPU不可缓存这个内存地址.

     

     

    64H16 DATASHEET REGISTER DEFINITIONS

     

     

    HWINIT

    RC

     

    在嵌入式ARM处理器中,没有专门的IO读取指令,而是采用存储器读写的方法访问寄存器,因此在PCI空间中还存在存储器映射IO设备, pci可预取存储器设备 与 存储器映射IO设备 的不同特点: 可预取存储器设备特点: 1)多次读写产生相同的数据; 2)允许在转发写缓冲器中进行字节合并; 对于存储器映射IO设备来说,上述两个特点均不适用,因为: 1)对于某些状态寄存器,读取可能导致状态位清除;对于FIFO,读取头部数据,会导致后面数据自动移位; 2)不能在桥芯片的转发写缓冲器中进行字节合并;
    展开全文
  • 重入和不重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A...

    本篇为转载文章:查看原文


    锁分为可重入锁不可重入锁
    可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢?

    • 可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。
    • 不可重入锁(自旋锁):不可以再次进入方法A,也就是说获得锁进入方法A是此线程在释放锁钱唯一的一次进入方法A。

    先举例来说明锁的可重入性:

    public class UnReentrant{
        Lock lock = new Lock();
        public void outer(){
            lock.lock();
            inner();
            lock.unlock();
        }
        public void inner(){
            lock.lock();
            //do something
            lock.unlock();
        }
    }
    

    outer中调用了inner,outer先锁住了lock,这样inner就不能再获取lock。其实调用outer的线程已经获取了lock锁,但是不能在inner中重复利用已经获取的锁资源,这种锁即称之为 不可重入 。通常也称为 自旋锁 。相对来说,可重入就意味着:线程可以进入任何一个它已经拥有的锁所同步着的代码块。

    不可重入锁基本原理:

    可以看到,当isLocked被设置为true后,在线程调用unlock()解锁之前不管线程是否已经获得锁,都只能wait()。
    代码如下:

    public class Lock{  
        private boolean isLocked = false;  
        public synchronized void lock()  
            throws InterruptedException{  
            while(isLocked){  
                wait();  
            }  
            isLocked = true;  
        }  
    
        public synchronized void unlock(){  
            isLocked = false;  
            notify();  
        }  
    }  
    

    可重入锁的基本原理

    我们修改Lock,加入一个变量lockBy用来保存已经获得锁的线程,这样就能对有锁的线程放行。

    public class Lock{
        boolean isLocked = false;
        Thread  lockedBy = null;
        int lockedCount = 0;
        public synchronized void lock() throws InterruptedException{
            Thread callingThread = Thread.currentThread();
            while(isLocked && lockedBy != callingThread){
                wait();
            }
            isLocked = true;
            lockedCount++;
            lockedBy = callingThread;
        }
        public synchronized void unlock(){
            if(Thread.curentThread() == this.lockedBy){
                lockedCount--;
                if(lockedCount == 0){
                    isLocked = false;
                    notify();
                }
            }
        }
    }
    

    解释一下程序中的两个变量:
    lockBy:保存已经获得锁实例的线程,在lock()判断调用lock的线程是否已经获得当前锁实例,如果已经获得锁,则直接跳过while,无需等待。
    lockCount:记录同一个线程重复对一个锁对象加锁的次数。否则,一次unlock就会解除所有锁,即使这个锁实例已经加锁多次了。

    在java 中,synchronized和java.util.concurrent.locks.ReentrantLock是可重入锁。

    展开全文
  • C语言概念

    2019-04-30 15:36:19
    文章目录1 概念1.1 c语言历史1.2...程序设计语言可分为语法和语义 语法表示形式,表示各个符号之间的组合规律 语义 表示程序的含义 高级程序设计语言:不依赖某种特定计算机的语言 1.1 c语言历史 1.2C语言程序...
  • 爬虫基本概念

    2019-11-07 12:09:55
    爬虫基本概念 一.爬虫的概念 网络爬虫又称为网络蜘蛛,...按照爬取形式,可分为累积式爬虫和增量式爬虫;按照爬取数据的存在方式,可分为表层爬虫和深层爬虫 1.通用爬虫和聚焦爬虫 通用爬虫是搜索引擎爬取系统(Baidu...
  • GPU概念

    2019-07-15 15:42:56
    GPU 在正式讲解GPU之前,我们先来讲讲上文中提到的一个概念——并行计算。 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的...并行计算可分为时间上的并行和空间上的并行。 时间上的并行是指...
  • Iptables概念

    2018-05-07 20:44:15
    看了朱双印老师的关于iptables的介绍,自己写一下,加深理解。...防火墙从逻辑上大体可分为主机防火墙,网络防火墙。主机防火墙:针对于单个主机的防范。 网络防火墙:一般处于网络的入口处,针对网络入口的防护
  • Java概念

    2020-06-19 10:05:21
    Java概念  Java的优点是与平台无关,是一款面向对象的语言,简洁有效,具有高度移植性。Java虚拟机(JVM)是使经过编译的Java代码在任何系统上都能运行。  Java主要分为3个技术分支:Java SE(Standard Edition...
  • 文章目录基本概念IT系统架构的发展到目前为止大致可以分为3个阶段物理机架构虚拟化架构云计算架构云计算模式云计算与OpenStack 基本概念 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络...
  • NodeJs概念入门

    2017-10-28 22:18:19
    了解一个新的概念或者技术,首先要着重于概念,一般可以分为这么几个套路  1)NodeJs是用来做什么的?  2)NodeJs的特点是什么,有哪些重要的概念,这些概念具体对应的是什么?  那么我们首先来看NodeJs是用来...
  • 进阶篇 函数 第一节1....参数 分为 选参数 必须的参数”’”’ 更复杂的需求1 + 2 = 31 + 2 + 31 + 2+ ….+ 1000def add(*num): d = 0 for i in num: d += i return dprint add(1,2,3,4,5)def add(*num):d
  • 二叉树概念

    2018-10-08 22:08:44
    1996年西安交大考了这个题.主要是对其中的一个选项有疑问,所以,就整理这一个点: ...觉得这个选项对的原因是什么呀,无非就是说有序,可分为左孩子右孩子,这样就是二叉树了.但事实是这样的,如果满足以上的要求,但...
  • 概念区分

    2016-06-12 20:06:55
    基本磁盘和动态磁盘本质区别 类型动态磁盘基本磁盘 更改磁盘容量在不重新启动的情况下可更改磁盘容量大小,而且不丢失数据。...必须是同一磁盘上的连续的空间才可分为一个区,分区最大的容量也就是
  • 基本概念

    2019-09-24 09:36:03
    环境ANSI C 的任何一个实现,都存在两种环境:编译环境,源代码被转换为执行的机器指令...编译分为几个阶段:预处理阶段,执行宏展开,头文件包含等操作。词法解析。词法规则转义序列转义序列表示\a提醒/(警报)\...
  • Linux进程概念

    2019-03-25 12:21:04
    《操作系统》概念分为三种状态 阻塞到就绪:等待的事件发生了 就绪到运行:进程调度程序为之分配了处理机后,该进程便由就绪状态转变运行 运行到就绪:时间片已用完而不得不让出处理机,于是进程从运行状态...
  • Window概念

    2017-03-28 11:29:25
    在Android中,窗口可分为三类: 1. 应用程序窗口 (Application Window)。是通常的、顶层的应用程序窗口。比如Activity就属于应用程序窗口。 2. 子窗口(Sub Window)。与顶层窗口相关联,token必须设置为它所附着的...
  • 度量软件的复用性不同应用中使用的频率复用花费的成本代码层面/模块...可以调用别人的比较器分为两种:显示的和隐示的委托的形式use(a use b)composition/aggregation(a owns b)association(a has b)在库函...
  • // // main.swift // Swift第四节 // // Created by lanou on 16/10/24. // Copyright (c) 2016年 lanou. All rights reserved. // ...//字符串分为 ...变字符串(var) 和不变字符串
  • 树的概念

    2019-05-27 13:42:12
    1时,其余节点可分为m个互不相交的有限集T1,T2,Tm,其中每一个集合本身又是一棵树,并且称为根的子树 2. 树中名词的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度,如上图A为3 树的度:一棵树中...
  • Apache Kafak概念

    2019-09-14 23:06:23
    是一个分布式,分区,冗余备份的持久化的消息系统。主要用户处理活跃的流式数据。 几个重要基本的概念: 1.Topic :主题,特指Kafak处理的消息源的不同分类。 2.Partition: Topic物理上的分区,一个Topic可以...
  • 接口测试概念

    2016-07-27 19:58:00
    一、Web接口测试概念  Web 应用的接口测试大体分为两类:模块接口测试和Web 接口测试。... 2.Web 接口测试又可分为两类:服务器接口测试和外部接口测试。  服务器接口测试:指测试浏览器与服务器...
  • 线程的概念

    2020-07-01 10:25:08
    程序是一段静态的代码,它是应用软件执行的蓝本。...线程是进程中独立执行的子任务,一个进程可以含有一个或多个线程,每一个线程都有一个唯一的标识符。 进程和线程的区别为:进程空间大体分为数据
  • STL基本概念

    2021-04-12 23:40:29
    1.软件界希望建立一种重复利用的东西 2.C++的面向对象和泛型编程思想,目的就是复用性的提升 3.为了建立数据结构和算法的一套标准 2.STL的基本概念 1.STL(Standard Template Library,标准模板库) 2.STL从广义上...
  • 链表的概念

    2020-04-06 17:06:37
    2.链表的分类:链表总共可分为八种。 a. 单向、双向 b. 带头、不带头 c. 循环、非循环 3.常用的链表有两种: **a. 无头单向非循环链表:**结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构....
  •   设计模式可分为3个类别:   (1)创建型模式:通常和对象的创建相关,涉及到对象实例化的方式(5种)   单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式   (2)结构型模式:描述如何组合类和对象以
  • css基本概念

    2018-08-28 10:28:08
    HTML的元素可分为几种类型 块级元素与内联元素 两者区别 1.块级元素会单独占一行,除非修改display属性,而内联元素可以在一行显示 2.块级元素可以设置高度,宽度等,而内联元素设置无效 3.块级元素的width默认...
  • Web标准的概念

    2013-01-08 10:50:28
    Web标准分为三个方面,即结构标准语言(包括XHTML和XML),表现标准语言(包括CSS)和行为标准(包括对象模型、ECMAScript),其具体内容如下 所示:  1.结构标准语言  1.1 XML:The Extensible Markup Language...
  • fabric基本概念

    2020-07-09 08:26:43
    Hyperledger fabric基本概念 首先fabric是由IBM贡献的超级账本框架。它是一个利用现有成熟的技术来组合而成的一个区块链技术的实现。它是一种允许插拔实现各种功能的的模块化架构。它具有强大的容器技术,来承载...
  • 计算机基本概念

    千次阅读 2016-04-06 19:39:59
    计算机基本概念 一、计算机系统  xxx 二、操作系统  xxx 三、计算机网络  计算机网络的组成包括硬件和... 计算机网络的分类,按距离可分为广域网(WAN)、城域网(MAN)和局域网(LAN)。  1. 计算机网络硬件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,996
精华内容 2,798
关键字:

概念可分为