【JAVA面试题-基础篇(八)】

Java中的集合有哪些

Java中的集合分为单列集合和双列集合,单列集合顶级接口为Collection,双列集合顶级接口为Map。
Collection的子接口有两个:List和Set。
List接口的特点:元素可重复有序(存取顺序)
List接口的实现类:
ArrayList:底层实现是数组,查询快,增删慢,线程不安全,效率高
Vector:底层实现是数组,查询快,增删慢,线程安全,效率低;【废弃】
LinkedList:底层实现是链表,增删快,查询慢,线程不安全,效率高;
Set接口的特点:元素唯一,不可重复,无序。
Set接口实现类:
HashSet:底层实现hashMap,数组+链表实现,不允许元素重复,无序
TreeSet:底层实现红黑二叉树,实现元素排序
Map接口的特点:key-value键值对形式存储数据
Map接口实现类:
HashMap:底层数组+链表实现,线程不安全效率高
TreeMap:底层红黑二叉树实现,可实现元素的排序
LinkedHashMap:底层hashmap+linkedList实现,通过hashmap实现key-value键值对存储,通过链表实现元素有序。
在这里插入图片描述

线程和进程的区别

1、进程是资源分配的最小单位,线程是程序执行的最小单位。
2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量
等数据,而进程之间的通信需要以通信的方式(IPC)进行。

多线程的实现方式

1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、通过线程池获取线程对象,实现多线程

线程的生命周期

新建状态(new一个线程的时候)
调用线程.start方法的时候,等待cpu分配时间片
可运行状态
当cpu分配到了时间片之后,线程开始运行,运行run方法当中的内容
运行状态
当线程遇到sleep、wait等方法的时候,线程会进入阻塞状态
阻塞状态
当休眠时间到期,或者被notify了,线程又回到了可运行状态
死亡状态
线程运行结束之后,就会销毁,被Jvm的gc回收

线程常用方法

1,.start():线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了。
2.run():Thread类的run()方法与Runnable接口中的run()方法功能和作用相同,都用来定义线程对象被调度之后执行的操作,都是系统自动调用而用户不得引用的方法。
3.sleep(int millsecond):优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间。
4.isAlive():线程处于“新建”状态时,线程调用isAlive()方法返回false,在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true。
5.currentTread():该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。
6interrupt():一个占用CPU资源的线程可以让休眠的线程调用interrupt()方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。
7.join():线程加入,主线程需要在子线程执行之后在结束。这就需要用到join()方法,通过join方法,对线程执行顺序进行排序。
8.yield():线程礼让,线程一次运行,理论上平均分配CPU时间片,不会抢夺。

sleep()和wait()有什么区别

类的不同:sleep()来之Thread,wait()来自Object
释放锁:sleep()不释放锁:wait()释放锁。
用法不同:sleep()时间会到自动恢复;wait()可以使用notify()/notifyAll()直接唤醒。

notify()和notifyAll()有什么区别

notifyAll()会唤醒所有线程,notify()之后唤醒一个线程。notifyAll()调用后,会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。
而notify()自会唤醒一个线程,具体唤醒哪一个线程由虚拟机控制。

线程run()和start()有什么区别

start()方法用于启动线程,run()方法用于执行线程的运行时代码
run()方法可以重复调用,而start()只能调用一次。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值