java并发面试题

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

  • 并发是指多个任务交替执行,通过任务切换实现并行的错觉。

  • 并行是指多个任务同时执行,各自在不同的处理单元上进行。

2.线程和进程的区别?

进程:是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。

线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。

3.守护线程是什么?

  • 守护线程:运行在后台,为其他前台线程服务。

  • 一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作。

  • 如垃圾回收线程

4.创建线程的几种方式?

  1. 继承 Thread 类创建线程;

  2. 实现 Runnable 接口创建线程;

  3. 通过 Callable 和 Future 创建线程;

  4. 通过线程池创建线程。

5.Runnable 和 Callable 有什么区别?

  1. Runnable 接口中的 run() 方法的返回值是 void,它做的事情只是纯粹地去执行 run() 方法中的代码而已;

  2. Callable 接口中的 call() 方法是有返回值的,是一个泛型,和 Future、FutureTask 配合可以用来获取异步执行的结果。

6.线程状态及转换?

Thread 的源码中定义了6种状态:new(新建)、runnnable(就绪)、运行(Running)、 terminated(终止)、blocked(阻塞)、waiting(等待)或time waiting (定时等待)。

7.sleep() 和 wait() 的区别?

1、sleep() 方法是让出cpu(到了指定时间,自动回到原线程);wait() 方法是让出同步资源锁(需notify() 唤醒,或加过期时间); 2、sleep() 方法可以在任何地方使用,而 wait() 方法则只能在同步方法或同步块中使用; 3、sleep()是Thread的一个静态方法;wait()是Object的方法。

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

run()start() 是线程的两个重要方法,它们有以下区别:

  1. run() 方法是线程的实际执行逻辑。我们可以在 run() 方法中编写线程的具体操作,例如执行某些任务、运行循环等。当 run() 方法执行完毕时,线程就会结束。

  2. start() 方法用于启动线程。调用 start() 方法后,系统会为线程分配资源并调用线程的 run() 方法。注意,我们不应直接调用 run() 方法来启动线程,而应该使用 start() 方法,因为直接调用 run() 方法只会在当前线程中执行 run() 方法的代码,并不会创建新的线程。

  3. 由于 start() 方法会为线程分配资源并调用 run() 方法,因此每次调用 start() 方法都会创建一个新的线程来执行线程的代码。多次调用 start() 方法会启动多个线程并发执行,而多次调用 run() 方法只是在当前线程中执行 run() 方法的代码,并不会创建新的线程。

总结起来,run() 方法是线程的实际执行逻辑,我们可以在其中编写线程的具体操作;start() 方法用于启动线程,创建并调度一个新的线程来执行线程的 run() 方法。要正确启动线程,应该使用 start() 方法而不是直接调用 run() 方法。

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

线程安全在三个方面体现:

原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);

可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized、volatile);

有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before 原则)。

10.Java 线程同步的几种方法?

1、synchronized关键字实现的同步代码块或者同步方法 2、ReentrantLock实现了Lock接口的可重入锁 3、ThreadLocal人手一份线程私有变量,保证了线程安全 4、原子变量内部的CAS自旋操作实现了多线程下的同步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿人啊兴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值