0
点赞
收藏
分享

微信扫一扫

学会这些,再也不怕面试被问线程知识了

如何创建线程

继承Thread类创建线程,重写run方法

实现Runnable接口创建线程,实例化thread类

使用Callable和Future创建线程

使用线程池例如用Executor框架

集成thread类和事项runable接口的区别

继承Thread: 线程代码存放Thread子类run方法中。

实现Runnable,线程代码存在接口的子类的run方法。

实现Runnable接口相对于继承Thread类来说,有如下的显著优势:

1 .适合多个相同代码的线程去处理同一个资源的情况

2.可以避免由于java的单继承特性带来的局限

3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据时独立的

线程之间如何进行数据共享

1.如果线程执行的代码相同,多个线程共享同一个runnable对象时,将共享数据放在runnable对象

2.如果多个线程执行的代码不同,将共享数据封装到一个对象中,将这个对象逐一传递给各个runnable对象

3.如果多个线程执行的代码不同,将共享数据作为外部类的final成员变量,将不同的runnable对象作为内部类主动取数据

  1. 将数据声明为static的方式()

如何创建线程池

这里给大家列出了4种创建线程池的方式具体怎么创,大家自己去了解 因为把代码般上来篇幅可能太大了

  1. newSingleThreadExecutor

创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

2.newFixedThreadPool

创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

  1. newCachedThreadPool

创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,

那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。

4.newScheduledThreadPool

创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

举报

相关推荐

0 条评论