精华内容
下载资源
问答
  • 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中...

    共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。
    在这里插入图片描述Volatile 关键字的作用是变量在多个线程之间可见。
    Volatile不具备原子性。

    展开全文
  • 关系模型中的一些关键字的定义

    千次阅读 2017-06-08 21:43:03
    关系(Relation):一个关系对应通常说的一张表。元组(Tuple):表中的一行即为一个元组。属性(Attribute):表中的一列即为一个...关系模型:对关系的描述,一般表示为 关系名(属性1,属性2,…,属性n)若关系中的某一属性

    关系(Relation):一个关系对应通常说的一张表。

    元组(Tuple):表中的一行即为一个元组。

    属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。

    码(Key):也称为码键。表中的某个属性组,它可以唯一确定一个元组。

    域(Domain):属性的取值范围。

    分量:元组中的一个属性值。

    关系模型:对关系的描述,一般表示为 关系名(属性1,属性2,…,属性n)

    若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key)

    若一个关系有多个候选码,则选定其中一个为主码(Primary key)

    候选码的诸属性称为主属性(Prime attribute)。不包含在任何候选码中的属性称为非主属性(Nonprimary attribute)或非码属性(Non-key attribute)。

    在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码(All-key)。

    展开全文
  • JMM内存模型&volatile关键字

    千次阅读 2020-11-16 16:43:52
    根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中...

    1 JMM简介

    Java的内存模型JMM(Java Memory Model),JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中;堆栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量。
    在这里插入图片描述

    2 案例

    2.1 代码

    public class VisibilityTest {
    
        private boolean flag = true;
    
    
        public void refresh() {
            flag = false;
            System.out.println(Thread.currentThread().getName() + " 修改了flag");
        }
    
        public void load() {
    
            while (flag) {
    
            }
            System.out.println(Thread.currentThread().getName() + " 跳出了循环");
        }
    
    
        public static void main(String[] args) throws InterruptedException {
            VisibilityTest test = new VisibilityTest();
            new Thread(test::load, "ThreadA").start();
            Thread.sleep(2 * 1000);
            new Thread(test::refresh, "ThreadB").start();
    
        }
    
    
    }
    

    在这里插入图片描述

    2.2 结果分析

    (1) ThreadA 读取主存flag=true,存入本地内存,进入自旋。
    (2) ThreadB 读取主存内存,flag=true,存入本地内存。修改flag=false,存入本地内存。
    (3) 在某一时刻,ThreadB将flag=false刷入主存中。
    (4) ThreadA优先在本地内存读取flag的值,仍然是true。
    (5) 所以即使ThreadB修改了flag的值,ThreadA仍然在自旋。

    3 volatile关键字

    public class VisibilityTest {
        
        /**
        *  作用:保证了不同线程间的可见性,如果是写操作,强制把缓存的数据写入主存,使其它CPU缓存中的数据失效
        */
        private volatile boolean flag = true;
    
    
        public void refresh() {
            flag = false;
            System.out.println(Thread.currentThread().getName() + " 修改了flag");
        }
    
        public void load() {
    
            while (flag) {
    
            }
            System.out.println(Thread.currentThread().getName() + " 跳出了循环");
        }
    
    
         
        public static void main(String[] args) throws InterruptedException {
            VisibilityTest test = new VisibilityTest();
            new Thread(test::load, "ThreadA").start();
            Thread.sleep(2 * 1000);
            new Thread(test::refresh, "ThreadB").start();
        }
    
    
    }
    

    在这里插入图片描述

    展开全文
  • 图书馆要整理书籍,一本书里会出现多个人物,现有两个表,一个是book,一个是hero,分别记录书本 信息和人物信息。比如说《神雕侠侣》这本书里有杨过、小龙女、郭襄等人物,这是属于一(book)对多(hero)问题,...

    1.场景

    图书馆要整理书籍,一本书里会出现多个人物,现有两个表,一个是book,一个是hero,分别记录书本 信息和人物信息。比如说《神雕侠侣》这本书里有杨过、小龙女、郭襄等人物,这是属于一(book)对多(hero)问题,我们可以把关系存在多的一方,即把外键存在hero表里

    2.模型类

    class BookInfo(models.Model):
        """图书信息:演示一对多,一方"""
        btitle = models.CharField(max_length=20, verbose_name='书名')
        bpub_date = models.DateField(verbose_name='发布日期')
        bread = models.IntegerField(default=0, verbose_name='阅读量')
        bcomment = models.IntegerField(default=0, verbose_name='评论量')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_books'  # 自定义数据库表名
    
        def __str__(self):
            return self.btitle # 输出该模型数据对象时,只输出书名
    
    
    class HeroInfo(models.Model):
        """人物信息:演示一对多,多方"""
        # 确定性别字段的取值范围
        GENDER_CHOICES = ((0, 'female'),(1, 'male'))
        # 添加外键是BookInfo
        hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='人物所属图书')
        hname = models.CharField(max_length=20, verbose_name='人名')
        hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
        hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_heros'
    
        def __str__(self):
            return self.hname
    
    2.1 由一到多(查询一本书里所有的人物)

    先找到某一本书,然后根据它的模型类小写加“_set.all()”获取所有子集

    b = BookInfo.objects.get(id=1)  # 找到某一本书
    b.heroinfo_set.all()  # 模型类小写+“_set.all()”
    
    2.2 由多到一(查询一个人物属于哪本书)

    先找到某个人,然后直接取相应的外键字段

    h = HeroInfo.objects.get(id=1)  # 找到某个人
    h.hbook  # 之前定义的外键字段
    

    3.related_name

    上面的由一取多的方法是通过模型类小写加“_set”获取所有子集,我们还可以使用自定义的方法取值,即指定related_name

    class BookInfo(models.Model):
    	...
    
    class HeroInfo(models.Model):
        """人物信息:演示一对多,多方"""
        # 确定性别字段的取值范围
        GENDER_CHOICES = ((0, 'female'),(1, 'male'))
        # 添加外键是BookInfo
        hbook = models.ForeignKey(BookInfo,related_name='subs' on_delete=models.CASCADE, verbose_name='人物所属图书')
    	...
    

    我们把之前的模型类加上了related_name字段,现在可以就可以使用related_name去取子集了

    b = BookInfo.objects.get(id=1)  # 找到某一本书
    # b.heroinfo_set.all()  # 模型类小写+“_set.all()”  原来的写法
    b.subs.all()  # 模型类小写+“_set.all()”
    
    展开全文
  • JMM基本介绍 MM(java内存模型Java Memory Model,简称JMM)...JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存...
  • 关系模型

    2017-03-08 12:07:11
    基本概念 关系一个关系对应于我们平时说的一张表。关系关系模式在某一时刻的状态或内容,即表中的内容,是数据库中的值。...主码:如果一个表中有多个关键字,选择其中的一个作为主关键字,其余的则
  • volatile关键字

    2019-08-21 18:34:08
    内存,cache,和寄存器之间的关系 寄存器是用于计算数据,而cpu所能访问的...简单的读取和赋值操作是原子性的,将一个变量赋给另外一个变量的操作不是原子性的. Java内存模型(JMM)只保证了基本读取和赋值的原子性操作,其...
  • 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。...
  • sql server关键字(Key)

    2013-05-30 23:07:34
    关键字(Key) 关键字关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。候选关键字(Candidate Key) 如果一个属性集能惟一地标识表的一行而又不含多余的属性,那么这个属性集称为候选关键字。主关键字...
  • 类中的大多数数据,只能用到本类的方法进行处理,类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。 举例: 2、java面向对象的特性有哪些? 答:三大特性:封装继承多态 封装 封装从字面...
  • 关系模型之基本概率

    2019-08-08 10:43:15
    组概念的区分:围绕关系的相关概念,如域、笛卡尔积,关系关系模式,关键字/键/码,外码/外键,主码/主键,主属性与非主属性。 三完整性:实体完整性,参照完整性和用户自定义的完整性; ...
  • Java内存模型 JMM(java内存模型) java虚拟机有自己的内存...JMM决定一个线程对共享变量的写入何时对另一个线程可见,JMM定义了线程和主内存之间的抽象关系:共享变量存储在主内存(Main Memory)中,每个线程都...
  • Java Volatile关键字

    2017-08-06 16:07:28
    当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接...
  • 关系模型概述 什么是关系 关系模型的完整性约束 重点与难点 ...形象的说:一个关系(relation)就是一个table。 关系模型就是处理table的,他由三部分组成:包括描述数据库各种关系的基本结构...
  • Unity shader关键字

    2016-08-22 20:41:07
    uv mapping的作用就是将一个2d贴图上的点按照一定规则映射到3d模型上。在cg程序中,在一个贴图变量之前加上uv字母,就代表提取它的uv值appdata_base: 包含顶点位置,法线和一个纹理坐标。 app
  • 说到JMM大家一定很陌生,被我们所熟知的一定是jvm虚拟机,而我们今天讲的JMM和JVM虚拟机没有半毛钱关系,千万不要把JMM的任何事情联想到JVM,把JMM当做一个完全新的事物去理解和认识。 我们先看一下计算机的理论...
  • 可见性:当一个线程修改了被volatile修饰的变量后,会马上通知其他线程,那么其他线程在读的时候,都会读到最新的变量值。 有序性:volatile通过内存屏障禁止了指令间的重排序(当指令或者操作间没有依赖关系时,...
  • 数据库中的数据表之间的关系包括一对一,一对多,多对多,它们分别使用关键字OneToOneField,ForeignKey,ManyToManyFiled进行定义,之前已经写了一对多,多对多介绍以及使用,准备再找一个时间写一下它们之间的一个...
  • java volatile 关键字

    2015-12-08 09:31:35
    1.volatile会强制线程每次都从主内存中...2.happens-before原则 当写一个 volatile 变量时,随后对该变量读时会创建一个 happens-before 关系,所有在 volatile 变量写操作之前完成的写操作,将会对随后该 volatile
  • Java内存模型JMM(java内存模型)java虚拟机有自己...JMM决定一个线程对共享变量的写入何时对另一个线程可见,JMM定义了线程和主内存之间的抽象关系:共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本...
  • 两个以上实体m:n多元联系到关系模型转化,也需要为联系单独建立一个关系,该关系中最少应包括它所联系的各个实体关键字,若是联系有属性,也要归入这个新增关系中。这种转换与两个实体间m:n联系的转换类似。例:某...
  • volatile关键字的作用

    2019-06-12 11:00:04
    Java内存模型定义了线程和主存之间的抽象关系:线程之间的共享变量存储在主存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程共享变量的副本。本地内存是Java内存模型一个抽象概念,并不真实存在,它...
  • 文章目录概念主要规则保证可见性保证有序性不能保证原子性内存屏障什么是内存屏障?内存屏障有什么作用?内存屏障和volatile...假定T表示一个线程,v和W分别表示两个volatile修饰的变量,那么进行read,load,use,ass
  • 目前正在接触webapi 现有两个MODEL,分别称之为... 我想通过ID作为关键字进行匹配,将Course表返回的结果作为Student表的一个子节点。Student表与Course表是一对多的关系,这意味着必须用list来存放数据,请指教
  • 一模型 #⼀学⽣有⼀档案,⼀档案属于⼀学⽣,那么学⽣表和档案表就是⼀对⼀关 #系。学⽣表是主表,档案表是从表,从表中有⼀外键和学⽣表关联,并且要求外 #键取值唯⼀。对应关键字为:...
  • 重点与难点 一组概念的区分:围绕关系的相关概念,如域,笛卡尔积,关系,关系模式,...形象地说,一个关系(relation)就是一个Table 关系模型的三个要素 基本结构:Table/Relation 基本操作:Relation Operat...
  • 关系模型中的键

    千次阅读 热门讨论 2014-04-21 16:40:34
    主键:在一个关系的若干个候选键中随意指定一个作为关键字,此关键字就是主键。 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键 主属性:候选键中的属性为主属性 非主属性:除候选键以外的属性...
  • JMMJMM: Java内存模型(Java Memory model)由于计算机的存储设备与处理器的运算速度有几数量级的差距,所以现代计算机系统都不得不加入层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 714
精华内容 285
关键字:

关系模型一个关键字