企业真题
线程和进程有什么区别
来源:?云网络、?团、腾?、?云网络、神??岳、言?有物、直?科技
- 进程:对应一个运行中的程序
- 线程:运行中的进程的一条或多条执行路径
3. 多线程使用场景
来源:嘉?医疗
- 浏览器:主线程、网络线程、每个标签页的渲染线程、…
- 多线程下载(迅雷)
- Tomcat 服务器上 web 应用,多个客户端发起请求,Tomcat 针对多个请求开辟多个线程处理
如何在 Java 中出实现多线程?
来源:阿?校招、当?置业、鸿?网络、奥?医药、?科软、慧?、上海驿?软件、海?科、北京中?瑞飞、锐?(上海)企业管理咨询
四种:
- 继承
Thread
类 - 实现
Runnable
接口 - 实现
Callable
接口 - 线程池
以及四种各自的优劣
Thread 类中的 start()
和 run()
有什么区别?
来源:北京中油??、爱?信、神?泰岳、直?科技、?软国际、上海?学网络、?度
start()
:① 开启线程 ② 调用线程的 run()
Java 中 Runnable
和 Callable
有什么不同?
来源:平?金服、银?数据、好?在、亿?征信、花儿??网络
call()
可以有返回值,更灵活call()
可以使用throws
的方式处理异常,更灵活Callable
使用了泛型参数,可以指明具体的call()
的返回值类型,更灵活
有缺点吗?如果在主线程中需要获取分线程call()
的返回值,则此时的主线程是阻塞状态的。(也不是缺点、是必然要阻塞的)
什么是线程池,为什么要使用它?
来源:上海明?物联网科技
最主要的:避免了频繁创建、销毁线程的消耗
- 提高了程序执行的效率(因为线程已经提前创建好了)
- 提高了资源的复用率(因为执行完的线程并未销毁,而是可以继续执行其他的任务)
- 可以设置相关的参数,对线程池中的线程的使用进行管理
sleep()
和 yield()
区别?
来源:神?泰岳
sleep()
:一旦调用,就进入“阻塞”(TIMED_WAITING
状态)yield()
:释放 CPU 的执行权,处在RUNNABLE
的状态
不同于 wait(),都不释放同步监视器
线程创建的中的方法、属性情况?
来源:招通??、数?互融
线程的生命周期?线程的基本状态以及状态之间的关系?
来源:中国??电子商务中心、?科软、慧?、直?科技、华?中?、?兴、美?、字?跳动、?东、?手
stop()
和 suspend()
方法为何不推荐使用?
来源:上海驿?软件
stop()
:一旦执行,线程就结束了,导致 run()
有未执行结束的代码。stop()
会导致释放同步监视器,导致线程安全问题。
suspend()
:与 resume()
搭配使用,导致死锁。
Java 线程优先级是怎么定义的?
来源:软?动力
三个常量。
范围:[1,10]
你如何理解线程安全的?线程安全问题是如何造成的?
来源:?软国际、奥?医药、?度校招、银?数据、史?夫软件
多线程保证线程安全一般有几种方式?
来源:来?科技、北京?信天?、北京联合??、天?伟业、阿??巴、锐?企业管理咨询、?软国际、?手、海?科
- 同步机制
Lock
接口
synchronized
加在静态方法和普通方法区别
来源:来?科技
同步监视器不同:
- 静态:当前类的
Class
对象 - 非静态:
this
Java 中 synchronized
和 ReentrantLock
有什么不同
来源:三?重工、中?国际、?美、鸿?网络、美?、字?跳动、阿??巴、?壳
synchronized
不管是同步代码块还是同步方法,都需要在结束一对{}
之后,释放对同步监视器的调用。Lock
是通过两个方法控制需要被同步的代码,更灵活一些。Lock
作为接口,提供了多种实现类,适合更多更复杂的场景,效率更高。
当一个线程进入一个对象的一个 synchronized
方法后,其它线程是否可进入此对象的其它方法?
来源:鸿?网络
需要看其他方法是否使用 synchronized
修饰,同步监视器是否是同一个。
只有当使用了 synchronized
,且是同一个同步监视器的情况下,就不能访问了。
线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
来源:阿?校招、西安?创佳?
- 同步一定阻塞
- 阻塞不一定同步
什么是死锁,产生死锁的原因及必要条件?如何避免?
来源:腾?、阿??巴、北京?蓝、?手
Java 中 notify()
和 notifyAll()
有什么区别
来源:汇?天下
notify()
:唤醒被wait()
的线程中优先级最高的那一个线程。如果被wait()
的多个线程的优先级相同,则随机唤醒一个。notifyAll()
:唤醒所有被wait
的线程。
被唤醒的线程从当初被 wait
的位置继续执行
为什么 wait()
和 notify()
方法要在同步块中调用
来源:北京?智
因为调用者必须是同步监视器
多线程:生产者,消费者代码(同步、wait
、notifly
编程)
来源:猫?娱乐、上海明?物联网、?为、字?跳动
wait()
和 sleep()
有什么区别?调用这两个函数后,线程状态分别作何改变?
来源:字?跳动、?东、外派?度、阿??巴、软?动力、?创
手写一个单例模式(Singleton)
来源:?通快递、君?科技、5?同城、北京联合??
饿汉式:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
懒汉式:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}