- 什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运算单位。 - 线程和进程有什么区别?
线程是进程的子集,每条线程并行执行不同 的任务。不同的进程使用不同的内存空间。而所有的线程共享同一个内存空间。 - 实现线程的方法
有三种,
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创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有的任务按执行顺序(优先级)执行
多线程面试题
最新推荐文章于 2024-07-10 21:31:13 发布