java并发编程基础面试总结01

java并发编程基础面试总结01,第1张

java并发编程基础面试总结01 1 什么是多线程

多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行 不同的任务。

2  多线程应用场景

例如: 迅雷多线程下载、数据库连接池、分批发送短信等。

3  为什么要使用并发编程

    提升多核CPU的利用率:

     一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲 *** 作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了 CPU的使用效率,如果使用单线程就只能有一个CPU核心被使用。 比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存,生成订单等等这些 *** 作,就可以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求, 而并发编程更能吻合这种业务拆分 。

简单来说就是: 充分利用多核CPU的计算能力; 方便进行业务拆分,提升应用性能

4   并发编程三个必要因素是什么?

   原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个 *** 作要么全部执行成功要么 全部执行失败。

   可见性:一个线程对共享变量的修改,另一个线程能够立刻看到。(synchronized,volatile)

   有序性:程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)

5  并发编程有什么缺点?

    并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏、上下文切换、线程安 全、死锁等问题。

6  并行和并发有什么区别?

    并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是 同时执行。

   并行:单位时间内,多个处理器或多核处理器同时处理多个任务,是真正意义上的“同时进行”。

   串行:有n个任务,由一个线程按顺序执行。由于任务、方法都在一个线程执行所以不存在线程不 安全情况,也就不存在临界区的问题。

    做一个形象的比喻:

   并发 = 俩个人用一台电脑。

   并行 = 俩个人分配了俩台电脑。

   串行 = 俩个人排队使用一台电脑。

7 多线程的好处?

   可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程 而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完 成各自的任务。

8 多线程的劣势?

   线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;

  多线程需要协调和管理,所以需要 CPU 时间跟踪线程;

  线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。

9 Java 程序中怎么保证多线程的运行安全?

   出现线程安全问题的原因一般都是三个原因:

  •    线程切换带来的原子性问题   解决办法:使用多线程之间同步synchronized或使用锁(lock)。
  •    缓存导致的可见性问题          解决办法:synchronized、volatile、LOCK,可以解决可见性问题
  •    编译优化带来的有序性问题   解决办法:Happens-Before 规则可以解决有序性问题
10 什么是线程和进程?

     进程:一个在内存中运行的应用程序。 每个正在系统上运行的程序都是一个进程

     线程:进程中的一个执行任务(控制单元), 它负责在程序里独立执行。

      一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

11  线程和进程区别?

      根本区别:进程是 *** 作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位 

      资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大 的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己 独立的运行栈和程序计数器(PC),线程之间切换的开销小。

     包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共 同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

    内存分配:同一进程的线程共享本进程的地址空间和资源,而进程与进程之间的地址空间和 资源是相互独立的

     影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃有 可能导致整个进程都死掉。所以多进程要比多线程健壮。

    执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独 立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5672175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存