文章目录[隐藏]
1. 并行和并发有什么区别?
- 并行:多个处理器或多核处理器同时处理多个任务。
- 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。本文来源gaodai#ma#com搞*!代#%^码网5
- 并发 = 两个队列和一台咖啡机。 并行 = 两个队列和两台咖啡机。
2. 线程和进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。
3. 守护线程是什么?
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 在 Java 中垃圾回收线程就是特殊的守护线程
4. 实现多线程的方式有哪些?
- 继承Thread类:Java单继承,不推荐;
- 实现Runnable接口:Thread类也是继承Runnable接口,推荐;
- 实现Callable接口:实现Callable接口,配合FutureTask使用,有返回值;
- 使用线程池:复用,节约资源;
5. 说一下 runnable 和 callable 有什么区别?
runnable 没有返回值,callable 可以拿到有返回值,callable 可以看作是 runnable 的补充
6. sleep() 和 wait() 有什么区别?
- 两者都可以暂停线程的执行。
- 类的不同:sleep() 来自 Thread,wait() 来自 Object。
- 释放锁:sleep() 不释放锁;wait() 释放锁。
- 用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。
7. 线程有哪些状态?
- NEW 尚未启动
- RUNNABLE 正在执行中
- BLOCKED 阻塞的(被同步锁或者IO锁阻塞)
- WAITING 永久等待状态
- TIMED_WAITING 等待指定的时间重新被唤醒的状态
- TERMINATED 执行完成