首页 > 编程知识 正文

多线程面试题及答案,多线程高并发面试题

时间:2023-05-06 12:25:45 阅读:13134 作者:4177

1、讲进程、线程、协和式的区别

进程是程序运行和资源分配的基本单元,程序至少是一个进程,进程至少是一个线程。 进程在运行时具有独立的存储器单元,多个线程共享存储器资源并减少切换次数,从而提高效率。 线程是进程的实体,是调度和分配CPU的基本单元。

2、什么是守护程序线程? 与非守护程序线程有什么区别?

程序运行完成后,JVM将等待守护程序以外的线程完成并退出,但JVM不会等待守护程序。 典型的例子是GC线程。

3、什么是多线程上下文切换?

多线程上下文开关是指CPU从一个运行线程切换到另一个等待线程以获取执行权限的过程。

4、如何创建线程? 继承Thread类创建线程类

继承Thread类并重写Run ) )方法。

创建Thread子类的实例时,将创建线程对象。

调用Thread对象的start ()方法来启动线程。

通过Runnable接口创建线程类

创建Runnable接口的实现类并重写Run ()方法。

创建Runnable实现类的实例,并从此实例中创建Thread对象作为Thread的target。 这个Thread对象才是真正的线程对象。

从Thread对象的start ()方法启动线程。

5、Thread类的start (和run )方法有什么区别?

start )方法用于创建新线程,start ) )方法在内部调用run ) )方法。 这与直接调用方法的效果不同。 xfdwn为run ) )方法时,只在原始线程上调用,而不启动新线程。

6、如何检测一个线程是否有目标监视器?

Thread类提供了holdsLock ()方法,这是一种在对象obj的监视器保留在当前线程中时返回true的静态方法

7、Runnable和Callable有什么区别?

Runnable接口的run ()方法的返回值是void,run ) )方法的代码只是简单地执行。

Callable接口的call ) )方法具有返回值,是通用的,可以与Future、FutureTask配合使用来获取异步执行的结果。

这其实是很有用的特性之一。 因为多线程比单线程更难也更复杂。 一个重要原因是多线程充满未知性。 有一个线程运行了吗? 线程运行了多久? 当一个线程运行时,我们期望的数据已经分配好了吗? 我不知道。 我们所能做的只是等待这个多线程任务完成。 Callable Future/FutureTask可以方便地获取多线程执行的结果,从而在等待时间过长而无法获取所需数据时取消线程任务

8、sleep ()、join ()、yield () )的区别是什么

sleep () :

暂停当前线程,根据给定时间进入阻塞状态,使其他线程继续执行。 此方法没有解除锁定标志,而是使用同步同步块,其他线程仍然无法访问共享数据。

wait () :

wait ) )方法必须与两个方法一起介绍(notify ) )和notifyAll ),以协调对共享数据的多线程访问,因此必须在同步语句块中使用。 也就是说,必须调用wait )、notify )和notifyAll ),请注意这些都是Object类的方法,而不是Thread类的方法。

wait ) )方法与sleep ) )方法不同,它取消对象的“锁定标志”。 对象的wait ) )方法被调用时,当前线程将暂停执行并置于对象等待池中。 notify ) )在调用方法之前,将从对象侦听池中删除任何线程并将其放置在锁定标志侦听池中。 只有锁定标志等待池中的线程才能获取锁定标志,并且可以随时争夺锁定所有权。 当调用对象的notifyAll ()方法时,对象等待池中的所有线程都将移动到该对象的锁定标志等待池中。

除了notify (和notifyAll )方法外,还可以使用带有毫秒参数的wait (长时间输出)方法。 这具有以下效果:在timeout毫秒延迟后,中断的线程将返回到锁定标志等待池。

另外,wait ()、notify和notifyAll ) )只能用于同步语句,但使用ReenTrantLock进行同步时,如何获得这三种方法的效果? 解决方法是使用ReenTrantLock.newCondition ()获取Condition类的对象,并将Condition的await (等待时间)、signal (信号)、signalAll (信号全部)分别与上述三种方法相对应

yield () :

与yield (方法为sleep )方法类似,不释放“锁定标志”。 区别在于,yield ) )方法只是将当前线程恢复到可执行状态,因此yield ) )执行的线程可能在可执行状态后立即又执行,并且yield ) )方法具有相同的优先级或较高的优先级

join () :

join ) )方法在调用当前线程为join ) )方法的线程结束之前不会继续执行

9、发生死锁的条件

1 .互斥条件:一个资源一次只能用于一个进程。 2 .请求和保留条件:一个流程被请求资源屏蔽时,对获得的资源不要放任不管。 3 .不剥夺在条件:进程中获得的资源。 在使用完毕之前,不得强制剥夺。 4 .循环等待条件:在几个过程之间形成头尾相连的循环等待资源关系。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。