面试系列之【基础篇2】– 多线程

面试系列之【基础篇2】– 多线程

1. 什么是进程和线程?

进程: 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
线程: 进程内部的一个独立执行单元;一个进程可以同时并发地运行多个线程,可以理解为一个进程便相当于一个单CPU操作系统,而线程便是这个系统中运行的多个任务。

2. 并发和并行?

并发: 指在同一时刻只能有一条指令执行,但多个进程指令被快速切换执行,使得在宏观上有多个进程同时执行的效果;
并行: 指在同一时刻,有多条指令在多个处理器上同时执行。

3. 多线程有什么优势?

first.进程之间不能共享内存,但线程之间共享内存非常容易;
second.系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发比多进程的效率高;
third. java语言内存了多线程功能支持,从而简化了Java的多线程变成。
所谓优势肯定是建立在对比的基础上的,在讲线程优势的时候,我们默认是跟进程做对比。

4. Thread 和Runnable的区别?

 实现Runnable接口比集成Thread类所具有的优势:
 1) 适合多个相同的程序代码的线程去处理同一个资源;
 2)可以避免Java中的单继承的限制;
 3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立;
 4)线程池只能放入实现Runnable或callable类的线程,不能直接放入继承Thread类的线程。

5. 多线程的生命周期?

在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。
新建状态(New):创建一个线程对象;
就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
运行状态(Running):就绪状态的线程获取了CPU,执行程序代码;
阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃了CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
阻塞又分三种情况:
等待阻塞: 运行的线程执行wait()方法,JVM会把该线程放入等待池中(wait会释放持有的锁)
同步阻塞: 运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁匙池中;
其他阻塞: 运行的线程执行sleep()或join()方法,或者发出了I/O请求时,则JVM会把该线程置为阻塞状态。当sleep(状态)超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态(注意:sleep是不会释放持有的锁的)
死亡状态(Dead)
线程会有三种方式结束:
1)run()或call()方法执行完成,线程正常结束;
2)线程抛出一个为捕获的Exception或Error;
3)直接调用该线程的stop() 方法来结束线程——该方法容易导致死锁。
注:当主线程结束时,其他线程不受影响,不会随之结束。

6. 什么是线程安全和线程不安全?

7. 线程安全问题

8. 线程同步锁有什么特点?

暂更到此,欢迎留言交流,一定知无不答,感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值