b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁????回答主要是三个方面:(1)hash(2)

电脑杂谈  发布时间:2018-01-23 01:02:05  来源:网络整理

(1)MD4

(2)MD5

(3)SHA-1算法

????Hashmap初始容量是16,若实际填充的容量是初始容量*负载因子,若全部填满查询的开销太大。因此hashmap的容量达到75%,就会扩容。扩容的大小是原来的一倍。

注意jdk1.8中若链表的结点数大于8,则会转化成红黑树(目的提高查询效率)

链接:

????负载因子load factor=hashmap的数据量(entry的数量)/初始容量(table数组长度),负载因子越高,表示初始容量中容纳的数据会越多,虽然在空间中减少了开销,但是大量数据聚集,造成查询上的大量开销。负载因子越低,表示初始容量中容纳的数据会越少,造成大量的内存空间浪费,但是查询的效率比较高。这是一个矛盾体,为了寻求平衡点,负载因子0.75效果是最好的。

????链接:

????要知道ConcurrentHashMap的结构、put和get方法

1、ConcurrentHashMap类中包含两个静态的内部类HashEntry

和Segment.HashEntry用来封装映射表的键值对;Segment 用来充当锁的角色,每个 Segment

对象守护整个散列映射表的若干个桶。每个桶由若干个HashEntry 对象链接起来的链表。一个ConcurrentHashMap

实例中包含由若干个 Segment 对象组成的数组。

2、用分离锁实现多个线程间的并发写操作(put方法实现的过程)

(1)key通过hash函数得到散列码

(2)散列码通过segmentFor找到对应的Segment(不允许value为空)

1)将散列值右移segmentShift 个位,并在高位填充 0

2) 然后把得到的值与 segmentMask 相“与”

3)从而得到 hash 值对应的 segments 数组的下标值

4)根据下标值返回Segment对象

(3)在Segment中执行具体的put操作

1)加锁(锁定某个segment,而非整个ConcurrentHashMap)

2)判断HashEntry 是否超过阀值(负载因子*数组长度),若超过要进行散列

3)没超过,判断键值对是否存在,采用头插法加入链表中‘;

4)然后解锁

2.5 HashMap与ConcurrentHashMap的关联与区别?

2.6 HashTable的实现原理?与ConcurrentHashMap的区别

2.7 concurrent包的并发容器有哪些?

3、java多线程问题

3.1 java实现多线程的方式及三种方式的区别

(1)继承Thread类,重写run函数

(2)实现Runnable接口(最常用)

(3)实现Callable接口

????三种方式的区别

(1)实现Runnable接口可以避免java单继承特性带来的局限,增强程序健壮性,代码能够被多个线程共享。

(2)Thread和Runnable启动线程都是使用start方法,然后JVM将此线程放到就绪队列中,如果有处理机可用,则执行run方法。

(3)实现Callable接口要实现call方法,并且线程执行完毕后会有返回值,其他的两种方法都是重写run方法,没有返回值。Callable接口提供了一个call()方法可以作为线程执行体,但call()方法比run()方法功能更为强大:call()方法可以有返回值;call()方法可以声明抛出异常。

定义:

(1)某个类的行为与其规范一致;

(2)不管多个线程是怎样的执行顺序和优先级,或是wait,sleep,join等控制方式。 如果一个类在多个线程访问下运转一切正常,并且访问类不需要进行额外的同步处理或协调,那么我们认为它是线程安全的。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-62103-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...