多线程面试题

多线程面试题

1.并行和并发有什么区别?

答:

1.并行指多个事件在同一时刻发生;

并发指在某时刻只有一个事件在发生,但某个时间段内由于CPU交替执行,可以发生多个事件。

2.并行没有对CPU资源的抢占;并发执行的线程需要对CPU资源进行抢占。

3.并行执行的线程之间不存在切换;并发会根据任务调度给线程分配CPU执行时间,然后线程进行切换。

2.线程和进程的区别?

答:

进程是指一段正在执行的程序。而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段、堆空间)及一些进程级的文件(列如:打开的文件),但是各个线程拥有自己的栈空间。在操作系统级别上,程序的执行都是以进程为单位的,而每个进程中通常都会有多个线程互不影响地并发执行。

3.创建线程有哪几种方式?

答:

1.继承Thread类

2.实现Runnable接口

PS:方式的优缺点:

1.实现Runnable创建多线程时,优点是:

线程类只是实现了Runnable接口,还可以继承其他类。在这种方式下,多个线程可以共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。

缺点:如果要访问当前线程,则必须使用Thread.currentThread()方法

2.继承Thread类的方式创建多线程时优点是:

如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

缺点:线程类已经继承了Thread类,所以不能再继承其他父类。

4.线程有哪些状态?

答:

1.新建状态:新创建了一个线程对象。

2.就绪状态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权,即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。

3.运行状态:就绪状态的线程获取了CPU,执行程序代码。

4.阻塞状态:阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。

阻塞的情况分三种:

①.等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒,

②.同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。

③.其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时,或者I/O处理完毕时,线程重新转入就绪状态。

5.死亡状态:线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

5.sleep() 和 wait() 有什么区别?

答:

相同点:两个方法都使程序进入一个暂停的状态
不同点:
1.wait是Object类中定义的方法,sleep是Thread类的方法。
2.wait方法会放弃持有的对象锁,进入等待队列,当该对象调用notify/notifyAll方法后才能去获取对象锁,进入运行状态。否则该线程永远处于挂起状态。
sleep方法会暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态,在调用sleep()方法的过程中,线程不会释放对象锁。
3.在过程中,wait方法会释放对象锁,而sleep方法,不会释放对象锁。

6.notify()和 notifyAll()有什么区别?

答:

notify() 方法随机唤醒对象的等待池中的一个线程,进入锁池;

notifyAll() 唤醒对象的等待池中的所有线程,进入锁池。

7.线程的 run()和 start()有什么区别?

答:

1.通常,系统通过调用线程类的 start() 方法启动一个线程,此时该线程处于就绪状态,而非运行状态,也就意味着这个线程可以被 JVM调用执行,执行的过程中,JVM通过调用目标类的 run() 方法来完成实际的操作,当 run() 方法结束后,线程也就会终止。
2.如果直接调用线程类的 run() 方法,就会被当做一个普通函数调用,程序中依然只有主线程这一个线程。通常把需要并行处理的代码放在run()方法中。

8.什么是死锁及如何解决?

答:

1.线程死锁是指由于两个或者多个线程互相持有所需要的资源,导致这些线程一直处于等待其他线程释放资源的状态,无法继续执行,如果线程都不主动释放所占有的资源,将产生死锁。

比如程A占有资源 1 的锁,去竞争资源 2 的锁;线程 B 占有资源 2 的锁,去竞争资源1的锁。

2.解决死锁的办法就是使用Lock的tryLock,并设置超时时间,超时可以退出防止死锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值