HashMap HashTable

HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。
主要的区别有:线程安全性,同步(synchronization),以及速度。

HashMap 线程不安全,单线程使用key value 可为空,
Hashtable 线程安全,多线程使用,加synchonized,

Iterater 用来遍历Set和List集合. 只可以向前遍历
ListIterator只能遍历List ,可以双向遍历.

sleep() 方法继承Thread 线程不会释放对象锁, 睡眠后不让出系统资源
wait() 来自Object ,线程会释放对象锁, 让其他线程可以占用CPU ,通过notify() 唤醒

Vector : 线程安全,多线程使用
ArrayList 线程不安全,动态数组 ,随机访问数据ArrayList优先,单线程使用.
LinkList 线程不安全,链表结构 ,插入删除数据LinkList优先,单线程使用.

final 声明属性,方法不能被重写,类不能被继承,变量不能被改变
finally 是异常处理语句 try catch finally
finalized 是object 类的方法,在垃圾回收执行的时候调用这个对象回收方法.

原子性: 多个操作不存在只执行了一部分. 要么全部执行完,如果只执行一部分,那么必须撤销
可见性:当多个线程访问同一个值,线程1 改变了变量的值,线程2,3,…都能读取到新的值
有序性:程序执行时,按照代码顺序执行

Synchorized 同步锁. 被修饰的方法和变量,在某一时刻只能被一个线程访问.
ThreadLocal 为每一个线程都提供了变量的副本,使得每个线程在某一时刻访问的并不是同一对象,这样就隔离的多线程的数据共享.
volalite修饰的变量,每次使用的时候都是从主存中获取.而不是各自的工作线程
修饰的变量被改变数值后没其他线程可见,保证可见性
修饰的变量不会被重排序,保证代码有序性

volatile :关键字 volatile 让变量每次在使用的时候,都是从住存中获取,而不是从各个线程的工作内存
当一个变量被定义volatile后就不会对变量进行重排序 保证代码有序性
线程在每次使用变量的时候,都会读取变量修改后的值 保证可见性

sunchronized ;同步 .被修饰的方法,当多线程访问时,只有一个执行完另一个才会执行 ,而且synchronized会将结果直接刷到主内存

volatile 优点: 不会堵塞线程,响应速度比synchronized块,保证内存的可见性 ,会使得所有对volatile变量的读写都会直接刷到主存,保证可见性
volatile本质是告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,
synchronized是锁定当前变量只有当前线程可以访问,其他线程被阻塞

Set 集合的数据没有顺序,且不能有重复的数据
List 集合中,数据可以重复,书友有顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值