☰
3、多线程高频面试题
2026/11/5 1:11:42 网站建设 项目流程

*1、创建线程有几种方式
我知道的创建线程的方式大体上可以分为四种:

1)继承Thread类并重写run方法创建线程
2)实现Runnable接口并重写run方法
3)实现Callable 接口并重写call方法
4)使用线程池创建
2、runnable和callable的区别

Runnable接口run方法无返回值;Callable接口call方法有返回值
*3、start和run的区别
run(): 封装了要被线程执行的代码,本质上就是一个普通方法,可以被调用多次

start(): 用来启动线程,底层会自动去执行run方法中的代码,start方法只能被调用一次

也就是启动线程的时候,只能调用start方法,如果调用的run方法,不会启动新线程,而是当普通方法调用执行


*4、现在有T1,T2,T3三个线程,如何保证它们按顺序执行?
用join()方法实现

具体来说就是:可以在t2之前调用t1.join(),在t3之前调用t2.join()

*5、现在有T1,T2,T3,T4 四个线程,如何保证T1、2、3执行完成后再执行T4线程?

可以使用CountDownLatch

CountDownLatch latch = new CountDownLatch(3);

T1、2、3线程方法中执行 latch.countDown();

latch.await();

执行T4

6、synchronized的实现原理是怎样的
在Java中,每个对象都隐式包含一个 monitor(监视器)对象,加锁的过程其实就是竞争 monitor 的过程,

当线程进入字节码monitorEnter指令之后,线程将持有monitor对象,执行monitorExit时释放 monitor 对象

如果在这个过程中,其它线程就会阻塞等待获取该monitor对象

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询