1. 为何要使用同步?
java 允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增
删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有
完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。
(1)同步方法 :即有 synchronized 关键字修饰的方法。由于 java 的每个对象都有一个
内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内
置锁,否则就处于阻塞状态。
代码如:
public synchronized void save(){}
注: synchronized 关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整
个类
(2)同步代码块 :即有 synchronized 关键字修饰的语句块。 被该关键字修饰的语句块
会自动被加上内置锁,从而实现同步
代码如:
synchronized(object){
}
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。通常没有必要同步整个方
法,使用 synchronized 代码块同步关键代码即可。
2.说好拿到 offer 就来牛客发面经,实现承诺
一面:
1.说说 C 语言中 free 和 malloc 区别
不知道。我不是学 C 的。
2.你知道基数排序么?
忘了,知道计数。
(这时候心想玩了,连续 2 个问题都不会,还玩个 P?)
3.说说什么是内存溢出和内存泄露
内存溢出:介绍 JVM 中 7 个区域,然后把每个区域可能造成内存的溢出的情况说明
内存泄露:介绍 GC 和 GC Root 不正常引用。
4.看来你对 JVM 蛮熟悉的啊,那你说说 JAVA 怎么分配直接内存?
A:JAVA 不能直接分配内存吧?
Q:我说是分配直接内存不是直接分配内存。
A:是 NIO 类的直接内存么?
Q:是的。
A:有点不记得了,能提示下么?
Q:sun 的一个包。