多线程和哈希的一点笔记

一、多线程
单核CPU:是没有并发处理的概念,一个核只能同时处理做一件事情。多个事情可以交替执行。
临界资源:某一时刻只能属于一个线程使用。
并发安全问题:多个线程同时去争抢一个临界资源,引发的问题。
单例模式中的线程安全问题:
1、没有if判断的,直接在成员变量那里初始化实例,不会产生线程安全问题,但会产生阻塞的情况。
2、有if判断,在if判断里new一个实例对象,会产生线程安全问题。
3、getSingleton 静态方法加了synchronized 关键字。不会产生线程安全问题。这是 加了一把类锁。
4、synchronized 同步代码块,加的是类锁。synchronized 前后都有if(singleleton == null)的判断,会产生线程安全问题。需要对成员变量singleton 加一个 volatile 关键字:禁止指令重排序。
new Singleleton()时,指令重排序。
开辟空间。
初始化对象,可能该线程还没进行初始化,其他线程就进来了,进行了初始化,那么该线程的对象是不可用的。
赋值。

线程安全的三个特点:
原子性:(一次执行完成)
有序性:(按照一定循序来执行)
可见性:(其他线程也要可以看到这个改变)
赋值操作是原子操作。但是long的赋值不是原子操作。8个字节,分成2个4字节来赋值。

哈希
哈希算法的目的就是为了验证原始数据是否被篡改。
哈希碰撞就是不同的值通过相同的哈希函数生成了相同的哈希值。
哈希碰撞不能够避免。
解决方法:
1.开放地址法:产生碰撞后,往后排就好,直到没有碰撞。
2.再哈希。 发生碰撞,再进行哈希,有可能频繁哈希。
3.链地址法:产生碰撞,相应的桶中形成链表。

哈希表:采用哈希算法将记录存储在一块空间内,这块空间就叫哈希表。
影响哈希表的查找性能因素:
1、哈希函数是否均匀。
2、解决哈希冲突的方法。
3、哈希表的装载因子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值