多线程和锁面试题

本文详细介绍了Java并发编程中的关键概念,包括并发编程三要素、线程与进程的定义、线程的创建方式、线程状态、线程池的创建、wait()、sleep()、yield()、join()方法的区别和用法,以及synchronized与Lock的区别。同时探讨了volatile关键字的作用、乐观锁和悲观锁的概念以及死锁的产生条件。
摘要由CSDN通过智能技术生成

目录

1、并发编程三要素

2、什么是线程和进程

3、创建线程的方式

4、Java线程具有五种基本状态

5、四种线程池的创建 (Excutors)

6、wait() 和 sleep() 方法的区别

7、线程的 sleep() 方法和 yield() 方法有什么区别?

8、线程的 join() 方法是干啥用的?

9、Thread 调用 start() 方法和调用 run() 方法的区别

10、synchronized 和 Lock 的区别

11、synchronized 各种加锁场景的作用范围

12、为什么要使用线程池?直接new个线程不是很舒服?

13、为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?

14、volatile 关键字的作用


1、并发编程三要素

(1)原子性

(2)可见性

(3)有序性

2、什么是线程和进程

        进程是指在系统中正在运行的一个应用程序,程序一旦运行就是进程。比如.exe文件运行,进程就可以视为程序的一个实例,大部分程序都可以运行多个实例进程

        线程是进程的一个子集,一个线程就是一个指令流的执行,线程按照一定的顺序把这些指令流交给CPU执行,就是线程的执行

3、创建线程的方式

(1)继承Thread类

(2)实现Runnable接口

(3)通过Callable 返回值 Future

(4)通过线程池

4、Java线程具有五种基本状态

(1)新建状态(New)

(2)就绪状态(Runnable)

(3)运行状态(Running)

(4)阻塞状态(Blocked)

(5)死亡状态(Dead)

5、四种线程池的创建 (Excutors)

(1)newCachedThreadPool创建一个可缓存线程池

(2)newFixedThreadPool创建一个定长线程池,可控制线程最大并发数

(3)newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行

(4)newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务

6、wait() 和 sleep() 方法的区别

1. sleep() 来自 Thread 类,wait() 来自 Object 类。

2. sleep 不会让线程释放同步锁的。wait() 会释放同步锁,让其他线程进入 synchronized 代码块执行。

3. sleep() 可以在任何地方使用。wait() 只能在同步控制方法或者同步控制块里面使用,否则会抛 IllegalMonitorStateException。

4. sleep() 在时间到了之后会重新恢复;wait() 则需要其他线程调用同一对象的 notify()/nofityAll() 才能重新恢复。

7、线程的 sleep() 方法和 yield() 方法有什么区别?

线程执行 sleep() 方法后进入超时等待(TIME

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值