java 概念区别

一、进程和线程区别

 

进程

线程

调度

拥有资源的基本单位

CPU调度和分配的基本单位

并发性

进程之间可并发执行

同进程间多线程也可并发执行

系统开销

大(系统分配和回收资源+创建和撤销线程)

小(创建和撤销开销)

拥有资源

拥有资源

不拥有,但可访问隶属于进程的资源

 

二、Callable和Runnable区别

 

Callable

Runnable

规定方法

call()

run()

返回值

可有可没有

没有

抛出异常

可抛

不能抛出异常

Future类

使用Callable需要与Future类配合使用。运行Callable任务可拿到一个Future对象,Future表示异步计算的结果

 

 

三、sleep()和wait()区别

 

sleep()

wait()

持有者

Thread的静态方法,休眠指定时间

Object的方法,任何对象都可调用,挂起,notify/notifyAll唤醒

时间参数

必加休眠时间参数

可加可不加

同步锁释放

一直持有,继续占用CPU资源

释放同步锁

synchronized搭配使用

可在任何地方执行

wait,notify,notifyAll只能在同步控制方法和同步控制块里使用

 

四、volatile和synchronized区别

 

volatile

synchronized

修饰对象

只能修饰变量

可修饰方法以及代码块

是否出现阻塞

多线程访问volatile不出现

会出现阻塞

数据可见性和原子性

能保证数据可见性,但不保证原子性(double和long除外)

保证原子性,也间接保证可见性

性能

线程同步的轻量级实现,性能比synchronized好

——

 

五、synchronized和lock区别(ReentrantLock,互斥锁,可重入锁)

 

synchronized

lock

 

关键字,在JVM层面实现对临界资源的同步互斥访问,通过对对象的头文件操作达到获取和释放锁

基于JDK层面实现的接口,是concurrent包下的类

获取锁和释放锁,死锁发生

s在在进入同步方法或同步代码块会自动获取锁,返回同步方法或退出同步代码块自动释放锁,不会发生死锁

必须显示获得锁,一定要在finally中通过unlock()显示释放锁,否则可能造成死锁

锁状态

无法判断

可知是否成功获得锁

锁类型

可重入,不可中断,非公平

(默认非公平,无法改变)

可重入,可中断,可公平

(默认非公平,可实现公平锁,扩展性好)

响应中断

线程阻塞时无法响应中断

RL获取锁的过程中能保持对中断的请求,抛出中断异常,同时锁释放

块结构加锁

s方法和s块都是基于块结构加锁

RL可用于非块结构加锁(例concurrentHashMap中的Segment分段锁机制,CAS+Synchronized)

 

六、ArrayList和LinkedList区别

 

ArrayList

LinkedList

相同点

都实现List接口

数据结构

可改变大小的数组,基于索引

双向链表

get,delect,插入

获得数据时间复杂度O(1),删除O(n),插入最坏O(n)

获得数据最坏O(n),删除O(1),插入O(1)

内存

 

更多

 

七、ArrayList和Vector区别

 

ArrayList

Vector

相同点

都实现List接口,List继承Collection接口,都有序,动态数组

同步性

线程不安全,读取快

线程安全,读取慢

扩容

默认增长1.5倍,没有提供设置增长空间大小

默认增长2倍,可设初始空间大小,还可设增长空间大小

 

七、HashMap和Hashtable区别

 

HashMap

Hashtable

相同点

存储结构,都是用哈希表存储键值对

解决哈希冲突方法一样

key和value值

允许为null

不允许为null

同步

不同步,适应单线程环境,不是线程安全

同步,适应多线程,方法加synchronized

大小和扩容

默认数组大小为16,要求底层数组容量为2的整数次幂(hash值发生碰撞概率小),扩容时为原2倍

默认数组大小为11,不要求容量为2的整数次幂,扩容为原容量2n+1   <<+1

哈希值使用

位运算获得哈希

直接使用对象的hashcode,取模哈希

    

 

七、Hashtable和ConcurrentHashMap区别

https://www.cnblogs.com/heyonggang/p/9112731.html

 

ConcurrentHashMap

Hashtable

相同点

线程安全

底层存储机构

jdk1.6 Segment数组+HashEntry数组+链表(锁分段机制,继承ReentrantLock)

jdk1.8 数组+链表+红黑树(抛弃分段锁机制,采用CAS+Synchronized)

哈希表

数组+链表

加锁

内部使用同步机制基于lock操作。。。。。

Synchronized关键字,对对象加锁,锁住对象整体(map),大小增加到一定程度,性能急速下降,,迭代时需要被锁很久

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值