静态变量:非线程安全的静态变量其实就是类变量,位于方法区,被所有对象进行共享,共享一份内存,一旦静态变量被改变,其他对象都对修改可见,所以是非线程安全的局部变量:线程安全的因为局部变量都位于每个本地线程的栈贞中的工作内存中,每个线程中的变量都是独立的,互不影响,所以不会出现线程不安全。
可重入锁可以用于比如一个线程需要重复多次获取锁的场景。可重入锁的原理:其实就是基于AQS的原理的
保证数据的可见性,也就是当使用了volitile的修饰变量的时候,只要当这个变量有改变就会从该线程的本地内存中的共享变量刷新到主内存中,保证了主内存中的数据一直都是最新的数据,如果是读一个volitile的数据的时候,JMM会把该线程相对应的本地内存变量置为无效,因为该本地变量无效了,所以就会去主内存中获取最新...
在Java5以前,switch(expr)中,exper只能是byte,short,char,int类型(或其包装类)的常量表达式。从Java5开始,java中引入了枚举类型,即enum类型。从Java7开始,exper还可以是String类型。但是long在所有版本中都是不可以的。jdk1.7并没有新的指令来...
final:他是用来进行修饰方法、类、以及属性变量的,如果修饰的是方法的话,表示方法不能够被覆盖,如果修饰的是类的话,就表示该类不能够被继承,如果修饰的是属性变量的话,就表示该属性变量不能够被修改。finally:他一般用来进行try。。catch语句之后,主要是为了进行释放一些连接资源,无论怎么finally...
HashSet其实底层的构造就是使用的是HashMap来进行实现的,但是还是会有些不一样的地反第一个是HashSet不允许元素重复,就算如果元素重复的话,也不会去覆盖之前重复的元素。还有一点就是在HashSet中存储的是对象的话,最好需要重写equals方法和hashCode方法,以保证放入Set对象的唯一性H...
第一步首先是加载jdbc的驱动程序然后就可以从负责管理jdbc驱动的管理类DriverManager中获取数据库的实例连接对象DriverManager.getConnection()来进行获取,拿到的是一个Connection对象实例接着是使用Connection对象来获取一个Statement对象实例,或者...
下面列举一下常出现的三种死锁情景:1.有一个用户A访问表A,已经锁住了A表,但是此时A又要去查询B表:同时用户B查询B表,而且也已经锁住了B表,此时B表也想去查询A表,由于此时A表已经被用户A锁,B表也已经用户B锁住,所以就会造成死锁。2.用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A...
第一条就是不要使用子查询进行查询多表的SQL可以只使用where的条件进行关联多表,不使用join来进行多表关联开启数据库的缓存,然后把多表查询都拆分为单个的查询
第一范式:我理解的第一范式其实就是数据库的列不能再继续分,强调的是列的原子性第二范式:首先是必须建立在第一范式基础上的,然后此外必须满足两个条件,第一个是必须有主键,第二个是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。其实就是消除部分依赖第三范式:满足第二范式下,并且表中的列不存在对非主...