大数据常见面试题之Java多线程

一.进程和线程的区别

  • 进程:进程是在执行的应用程序,一个进程可有多个线程
  • 线程:是进程内部的一个执行序列,又叫做轻量级进程

二.创建线程的方式

  • 1.继承Thread类
  • 2.实现Runnable接口
  • 3.实现 Callable 接口
  • 4.应用程序可以使用Executor框架来创建线程池
    实现Runnable接口这种方式更受欢迎,因为不需要继承Thread类,在应用设计中已经继承了别的对象情况下,这需要多继承(而Java中不支持),只能实现接口
    线程池使用的也较多,非常高效,很容易实现和使用

三.线程状态

  • 就绪状态(Runnable):线程准备运行,不一定立马就能开始执行
  • 运行中(Running):进程正在执行线程代码
  • 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束
  • 睡眠中(Sleeping):线程被强制睡眠
  • I/O阻塞(Blocked On I/O):等待I/O操作完成
  • 同步阻塞(Blocked On Synchronization):等待获取锁
  • 死亡(Dead):线程完成了执行

四.同步方法和同步代码块的区别

在Java语言中,每一个对象有一把锁.线程可以使用synchronize关键字来获取对象上的锁.
synchronize关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)

五.谈谈关于synchronize和lock

synchronize是Java中的关键字,当他用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.JDK1.5以后引入了自旋锁,锁粗化,轻量级锁,偏向锁;来优化关键字的性能
Lock是一个接口,而synchronize是关键字,synchronize是内置的语言实现,synchronize在发生异常时,会自动释放线程占有的锁,因此不会发生死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock方法去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally代码块中释放锁,Lock可以让等待锁的线程响应中断,而synchronize却不行,使用synchronize等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道是否成功获取了锁,而synchronize却做不到

六.什么是线程池?Java自带哪几种线程池?

在面向对象编程中,创建和销毁对象是很费时间的,因为每创建一个对象需要获取内存资源或者其他更多资源.在Java中更是如此,虚拟机试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就是"池化资源"技术产生的原因.线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销

1.new CachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
工作线程的创建数量几乎没有限制(最大数为Integer.MAX_VALUE),这样可灵活的往线程池中添加线程
若长时间没有往线程池中提交任务,即如果工作空闲了指定的时间(默认为1分钟),则该工作线程将自动终止,终止后,若你又提交了新的任务,则线程池创建一个新的工作线程
在使用CachedThreadPool时,一定要注意控制任务的数量,否则由于大量的线程同时运行,很有可能会造成系统瘫痪

2.new FixedThreadPool

创建一个指定工作线程数量的线程池,每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中.FixedThreadPool是一个典型且优秀的线程池,它具有提高程序效率和节省创建线程时所耗开销的的优点.但是,在线程池空闲时,即线程池中没有可运行任务时,他不会释放工作线程,还会占用一定的系统资源

3.new SingleThreadPool

创建一个单线程化的Executor,即只创建唯一的工作线程来执行任务,他只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行.如果这个线程异常结束,会有另一个取代他,保证顺序执行.单工作线程的最大特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的

4.new ScheduleThreadPool

创建一个定长的线程池,而且支持定时地以及周期性地任务执行,支持定时及周期性任务执行,延迟3秒执行

猜你喜欢

转载自blog.csdn.net/sun_0128/article/details/107636922