目录
- 1、进程和线程的区别
- 2、并发与并行的区别
- 3、Java创建线程的常用方式
- 4、run()和start()方法区别
- 5、wait和sleep的核心区别
- 6、Java线程有几种状态
- 7、volatile关键字的作用
- 8、synchronized关键字的作用
- 9、什么是死锁,产生原因是什么
- 10、为什么要用线程池
1、进程和线程的区别
进程是独立的程序运行单位,占用独立内存,互不干扰;线程是进程中的执行单元,共享进程资源,开销更小、更轻量。
2、并发与并行的区别
并发是多个任务交替执行,看似同时;并行是多个任务真正同一时刻同时执行。
3、Java创建线程的常用方式
两种基础常用方式:继承Thread类、实现Runnable接口。工作中优先用线程池创建线程。
4、run()和start()方法区别
start():真正开启新线程,只能调用一次;run()是普通业务方法,直接调用不会开启新线程。
5、wait和sleep的核心区别
wait会释放锁资源,需要被唤醒;sleep不会释放锁,时间到自动执行。
6、Java线程有几种状态
常用六种状态:新建、可运行、阻塞、等待、限时等待、终止。
7、volatile关键字的作用
保证多线程之间变量数据实时可见,不保证操作原子性,用于解决简单的数据可见问题。
8、synchronized关键字的作用
基础同步锁,修饰方法或代码块,保证多线程下代码安全,防止数据错乱。
9、什么是死锁,产生原因是什么
两个及以上线程互相持有对方需要的锁,互相等待、程序卡死。多为锁使用顺序混乱导致。
10、为什么要用线程池
避免频繁创建、销毁线程造成资源浪费,统一管理线程,提高程序运行效率。