多线程面试题

  1. 什么是线程?
    线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运算单位。
  2. 线程和进程有什么区别?
    线程是进程的子集,每条线程并行执行不同 的任务。不同的进程使用不同的内存空间。而所有的线程共享同一个内存空间。
  3. 实现线程的方法
    有三种,
    1. 继承Thread 类,从代码上看,Thread 类其实是实现Runnable的一个实例,继承Thread 类后需要重写Run()方法,并通过Start()启动线程。
    继承Thread类耦合性太强,而且java只能单继承,所以不利于扩展。
    2. 实现Runnable接口
    通过实现Runnable接口并重写run()方法,并把Runnable实例传给Thread对象,Thread对象的start()方法调用run方法,再通过调用Runnable的run方法类启动线程。
    3.实现Callable接口
    通过实现Callable接口并重写call方法,并把Callable实例传给FutureTask对象,再把FutureTask 对象传给Thread对象。它与Thread和Runnable最大的不同在于Callable能返回一个异步处理的结果Future对象并能抛出异常,而其他两种不能
    4.线程池的用法
    什么是线程池?
    线程池就是首先创建一些线程,他们的集合称为线程池。使用线程池可以很好地提升性能,线程池在线程启动的时候即创建大量的空闲线程,程序将一个任务交给线程池,线程池就会启动一个线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。
    使用线程池背景:
    多线程运行时间,系统不断启动和关闭新线程,运行成本十分高,会过度消耗系统资源,增加过度切换线程的危险,从而可能导致线程资源的崩溃。这时线程池就是最好的选择。
    具体执行框架
    Executor框架是一种将线程的创建和执行分离的机制。它基于Executor和ExecutorService接口,以及这两个接口的实现类ThreadPoolExecutor展开,Executor有一个内部线程池,并提供了将任务传递到池中线程以获得执行的方法,可传递的任务有以下几种,通过Runnable接口实现的任务和通过Callable接口实现的任务,在这两种情况下只需要传递任务到执行器,执行器就可以使用线程池中的线程和新创建的线程来执行这个任务,执行器也决定执行任务的时间。
    JAVA 提供四种线程池的实现:
    A. newFixedThreadPool用来创建一个定长线程池,可控制线程最大并发数,超出的部分会在队列中进行等待。
    B.newCachedThreadPool用来创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,创建新的线程。
    C newScheduledThreadPool 创建一个定长线程池,支持定时和周期性任务执行。
    D newSingleThreadExecutor创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有的任务按执行顺序(优先级)执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值