Java-常见面试题收集(四)

本文详细介绍了Java中的并发编程,包括线程安全的保证、线程和进程的区别、线程的基本状态、同步与异步操作、并发与并行概念、线程run()与start()的区别、Runnable和Callable接口、线程死锁、sleep()和wait()方法以及如何控制线程执行顺序。此外,还探讨了volatile关键字在多线程中的作用。

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

十 并发编程

1 Java 怎么保证多线程运行安全?

  线程安全是程序设计中的术语,指某个方法在多线程环境中被调用时,能正确的处理多个线程中的共享变量,使程序正确执行。Java 中线程安全体现在以下三个方面:
  原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作
  可见性:一个线程对主内存的修改可以及时地被其他线程看到
  有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序

  因此,只要满足上述三个条件,我们就可以说该代码是线程安全的。那么,Java 中提供了如下解决方案:
  使用 sychronized 关键字
  使用线程安全类,如:java.util.concurrent 包下的类
  使用并发包下 Lock 相关锁
  总结:想要代码满足线程安全,只需要代码满足原子性、可见性、有序性即可。

2 线程和进程的区别?Java 实现的多线程的方式有哪几种?

  线程和进程的区别: 进程是程序的一次动态执行过程,每个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程(比如浏览器可以开多个窗口,每个窗口就是一个进程)多进程操作系统能够运行多个进程,每个进程都能够循环利用所需要的 CPU 时间片,使的所有进程看上去像在同时运行一样。
  线程是进程的一个执行流程,一个进程可以由多个线程组成,也就是一个进程可以同时运行多个不同的线程,每个线程完成不同的任务。
  线程的并发运行:就是一个进程内若干个线程同时运行。(比如:word 的拼写检查功能和首字母自动大写功能是 word 进程中的线程)线程和进程的关系是一个局部和整体的关系,每个进程都由操作系统分配独立的内存地址空间,而同一进程的所有线程都在同一地址空间工作。
  多线程实现方式: Java 多线程实现方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口通过FutureTask 包装器来创建 Thread 线程、使用 ExecutorService、Callable、Future 实现有返回结果的多线程。
  继承 Thread 类,重写 run 方法
  实现 Runnable 接口,重写 run 方法,实现 Runnable 接口的实现类的实例对象作为 Thread 构造函数的 target
  通过 Callable 和 FutureTask 创建线程
  通过线程池创建线程

3 线程有哪些基本状态,并描述每种状态

  新建状态(New):当线程对象被创建时,它进入新建状态。此时,线程只是被创建,但还没有开始执行,也没有分配CPU时间,它只是一个尚未执行的任务。
  就绪状态(Ready或Runnable):当线程调用了start()方法后,它进入就绪状态。这意味着线程已经准备好运行,但还需要等待操作系统的调度,以获取CPU时间片。
  运行状态(Running):当线程被CPU选中并执行时,它进入运行状态。此时,线程正在执行其任务。
  阻塞状态(Blocked):当线程因为某种原因(例如等待I/O操作完成或进入sleep状态)无法继续执行时,它进入阻塞状态。在阻塞状态中,线程暂时放弃CPU的使用权,直到某种条件满足(例如I/O操作完成或sleep时间结束),线程重新进入就绪状态,等待CPU的调度。
  等待状态(Waiting):当线程需要等待其他线程执行完毕或者满足某个条件时,它会进入等待状态。例如,使用join方法时,当前线程会等待其他线程执行完毕。等待状态是线程主动放弃CPU使用权的一种形式。
  超时等待状态(Timed Waiting):这是等待状态的一种特殊形式。当线程使用sleep方法时,它会进入一个有时限的等待状态。如果超过了设定的时间,线程会自动醒来并进入就绪状态。
  终止状态(Terminated):当线程完成任务或被强制终止时,它进入终止状态。此时,线程释放所有资源,并且不再占用CPU时间。一旦线程进入终止状态,就不能再复生。

4 同步和异步的区别

  同步和异步是描述两个或多个操作之间如何相互关联和依赖的术语,特别是在编程和并发处理中。以下是同步和异步之间的主要区别:

  同步(Synchronou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰勒疯狂展开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值