并发编程的面试题

1、线程的基础知识

1.1、线程和进程的区别?

1.2、并行与并发有什么区别?

1.3、创建线程的方式有哪些?

 

1.4、线程中包括了哪些状态?状态之间是如何变化的?

1.5、新建T1、T2、T3三个线程,如何保证它们按照顺序执行?

1.6、notify和notifyAll有什么区别?

1.7、在java中wait方法和sleep方法有什么区别?

1.8、如何停止一个正在运行的线程?

第一种退出标志的例子:使用volatile关键字的目的是使其他线程对flag的修改对当前线程可见 避免编译器将其优化

package com.pdh.cache;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: lihaojie
 * @Description:
 * @DateTime: 2024/4/25 10:38
 **/
@Slf4j
public class MyInterrupt extends Thread{

    volatile boolean flag = false;

    @Override
    public void run() {
        while (!flag) {
            log.info("MyThread...run...");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {

        // 创建MyThread对象
        MyInterrupt t1 = new MyInterrupt();
        t1.start();

        // 主线程休眠6秒
        Thread.sleep(6000);

        // 更改标记
        t1.flag = true;

    }

}

2、线程的并发安全

2.1、Synchronized关键字的底层原理

 

当一个线程进入到Synchronized代码块之后,会让这个对象锁与这个Monitor进行关联,Monitor的Owner是否已经被别的线程持有,如果持有则进入到EntryList中进入到一个等待,并将该线程阻塞

2.2、Synchronized进阶

Monitor实现的锁都属于是重量级锁,你了解过锁升级吗?

  • Monitor是JVM提供的,C++实现的,实现的锁属于重量级锁,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低

2.3、谈一谈JMM(Java内存模型)

JMM(Java Memory Model)Java内存模型,定义了共享内存中多线程程序读写操作的行为规范,通过这些规则来规范对内存的读写操作从而保证指令的正确

 

2.4、CAS你知道吗?

2.5、请谈谈你对volatile的理解

返回结果:

为什么第三个线程一直没有打印呢?实际上是因为JVM虚拟机中有一个JIT(即时编译器)对代码做了优化

2.6、什么是AQS?

2.7、ReentrantLock实现原理

2.8、Synchronized和Lock的区别?

2.9、死锁的产生条件

2.10、ConCurrentHashMap

2.11、导致并发的根本原因?

相关推荐

  1. 面试宝藏】Go并发编程面试

    2024-04-25 16:20:01       30 阅读
  2. 真实并发编程问题-1.钉钉面试

    2024-04-25 16:20:01       53 阅读
  3. 并发面试汇总

    2024-04-25 16:20:01       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 16:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 16:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 16:20:01       82 阅读
  4. Python语言-面向对象

    2024-04-25 16:20:01       91 阅读

热门阅读

  1. Flutter 扒一扒图片缓存框架cached_network_image

    2024-04-25 16:20:01       22 阅读
  2. pytest-cov代码覆盖率

    2024-04-25 16:20:01       35 阅读
  3. 宝塔Linux面板命令大全

    2024-04-25 16:20:01       30 阅读
  4. Flink容错机制

    2024-04-25 16:20:01       33 阅读
  5. Web 前端进阶—— Http 和数据结构 学习笔记

    2024-04-25 16:20:01       30 阅读
  6. go-zero整合Kafka实现消息生产和消费

    2024-04-25 16:20:01       25 阅读
  7. 二叉树的层序遍历

    2024-04-25 16:20:01       29 阅读
  8. 【opencv手动下载库】

    2024-04-25 16:20:01       31 阅读