JAVA中的面试题-多线程

本文介绍了Java中创建线程的三种方法及其区别,并详细探讨了如何安全地停止正在运行的线程,包括推荐的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题1:Java中创建一个线程的方式有哪几种有什么区别?

1.集成Thread类 2.实现Runnable接口 3.实现Callable接口,它的call可以作为线程的执行体,Future接口作为作为call方法的返回值,只不过这种方法不经常使用。

区别:主要讲前两个方式的区别
区别1:
继承Thread类之后,可以直接调用start方法来启动当前线程(注意!不是调用run方法)
实现Runnable接口之后,该类只是作为Thread的类的目标来启动线程。new Thread(demo).start();
区别2:
当一个类想继承Thread类,那么前提是它不能集成别的类!而实现Runnable接口的对象没有这个限制,而且实现了Runnable接口之后,还可以实现别的接口。


面试题2. 如何停止一个正在运行的线程?

(1)方法1: 调用Thread.stop()方法停止线程。

Thread.stop()不安全,已不再建议使用。

该方法天生是不安全的。使用thread.stop()停止一个线程,导致释放(解锁)所有该线程已经锁定的监视器(因沿堆栈向上传播的未检查异常ThreadDeath而解锁)。如果之前受这些监视器保护的任何对象处于不一致状态,则不一致状态的对象(受损对象)将对其他线程可见,这可能导致任意的行为。

(2)方法2: Thread.interrupt()

传递InterruptedException。这是最明智的策略,将异常传递给方法的调用者。
恢复中断。在不能上抛的情况下,如Runnable方法,必须捕获InterruptedException,并通过当前线程的interrupt()方法恢复中断状态,这样在调用栈中更高层的代码将看到引发了一个中断。
(3)方法3:停止一个线程最佳实践是 中断 + 条件变量。

中断只是一种协作机制,需要被中断的线程自己处理中断。

停止一个线程最好的做法就是利用共享的条件变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值