JavaSE相关知识

本文详细介绍了Java中的多线程概念、创建方式,重点讲解了线程池的创建、ThreadPoolExecutor构造参数,以及线程安全的集合如SynchronizedMap和ConcurrentHashMap。此外,还对比了StringBuffer和StringBuilder、ArrayList和LinkedList、HashMap和HashTable的区别和特性。
摘要由CSDN通过智能技术生成

1、 什么是多线程&多线程的优点

        多线程是指程序中包含多个执行流,即一个程序中可以同时运行多个不同的线程来执行不同的任务。

        优点:可以提高cpu的利用率。多线程中,一个线程必须等待的时候,cpu可以运行其它的线程而不是等待,这样大大提高了程序的效率。

2、如何创建多线程

        Java 3种常见创建多线程的方式

        (1)继承Thread类,重run()方法

        (2)实现Runnable接口,重写run()方法

        (3)通过创建线程池实现

3、如何创建线程池

        Executors提供了线程工厂方法创建线程池,返回的线程池都实现了ExecutorServer接口。

        newSingleThreadExecutor

        newFixedThreadExecutor

        newCachedThreadPool

        newScheduledThreadPool

        虽然Java自带的工厂方法很便捷,但都有弊端,《阿里巴巴Java开发手册》中强制线程池不允许使用以上方法创建,而是通过ThreadPoolExecutor的方式,这样处理可以更加明确线程池运行规则,规避资源耗尽的风险。

4、ThreadPoolExecutor构造函数参数解析

        (1)corePoolSize 创建线程池的线程数量

        (2)maximumPoolSize 线程池的最大线程数

    (3)keepAliveTime 当线程数量大于corePoolSize ,空闲的线程当空闲时间超过keepAliveTime时就会回收;

        (4)unit  { keepAliveTime} 时间单位

        (5)workQueue 保留任务的队列

5、列举线程安全的Map集合

        SynchronizedMap、ConcurrentHashMap

6、StringBuffer和StringBuilder的区别

        (1)StringBuffer中的方法大都采用synchronized关键字进行修饰,是线程安全的,效率低。

        (2)StringBuilder是线程不安全的,效率高。 

7、ArrayList和LinkedList的区别

        (1)ArrayList基于动态数据实现,LinkedList基于链表实现,两者都是线程不安全的

        (2)ArrayList基于数组,查询快;linkedList基于链表,新增和删除更快

        (3)LinkedList不支持高效的随机访问

8、HashMap和HashTable的区别

        1)继承的父类不同

                HashMap继承AbstractMap类

                HashTable继承Dictionary类(已经废弃的类),用比较少

        2)是否线程安全

                HashMap是线程不安全的效率高,HashTable是线程安全的,效率低。 

        3)key和value是否允许null值

                Hashtable中,key和value都不允许出现null值。HashMap中,都可出现null。

9、HashMap的底层原理

        1)HashMap的实现原理

        HashMap实际上是一个数组和链表的结合体,HashMap基于Hash算法实现的;

        (1)当我们向HashMap中Put元素时,利用key的hashCode重新计算出当前对象的元素在数组中的下标

        (2)写入时,如果出现Hash值相同的key,此时分类,如果key相同,则覆盖原始值;如果key不同,value则放入链表中

        (3)读取时,直接找到hash值对应的下标,在进一步判断key是否相同,进而找到对应值

        2)HashMap在JDK1.7和JDK1.8中有哪些区别

        JDK1.7:数组 + 链表

JDK1.8:数组+红黑树

3)HashMap的Put方法具体流程

4)HashMap的扩容

        HashMap中的键值对大于阈值或者初始化时,就调用resize()进行扩容。

        每次扩展的时候都是扩展2倍。

10、HashMap里面放100条数据,初始化应该是多少

        扩容因子0.75

        100/0.75≈133.3

        初始化134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值