关键字

Posted programmerzx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字相关的知识,希望对你有一定的参考价值。

Synchronized

介绍

synchronized是Java实现同步的一种机制,它属于Java中关键字,是一种jvm级别的锁。synchronized锁的创建和释放是此关键字控制的代码的开始和结束位置,锁是由jvm控制的创建和释放的,正是因为这一点,synchronized锁不需要手动释放,哪怕是代码出现异常,jvm也能自动释放锁。

为什么要使用synchronized

在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。

实现原理

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性

应用方式

对于普通的同步方法:
锁是当前的对象
对于静态函数的同步方法:
锁是静态函数所在类的class对象
对于同步方法块的内容:
锁是指Synchonized括号里配置的对象

volatile

Java程序中,为了提高程序运行效率,编译器会自动对其进行优化,把经常被访问的变量缓存起来,程序在读取变量时可能直接从缓存(例如寄存器)中来读取这个值,而不会从内存中取。但当遇到多线程编程时,变量的值可能因为别的线程而改变,但是缓存的值不会相应的发生变化,从而造成应用程序读值和实际值不一样。
volatile是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量。被volatile修饰的变量,系统每次用到它都会直接从内存中提取,而不利用内存。所以被修饰的变量,所有线程线程在任何时候看到的值都是相同的。
volatile不能保证原子性,所以volatile不能代替Synchronized。而且volatile会降低程序的运行效率,所以能不用则不用。

以上是关于关键字的主要内容,如果未能解决你的问题,请参考以下文章

关系型数据库中的关键字主关键字和候选关键字

数据库中啥是主关键字?主关键字与外关键字的区别与联系?

怎样判断一个单词是否ABAP中的关键字

asp中关键字问题求救!~

Python 关键字

详解如何定义SQL Server外关键字约束