码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java线程面试题


    Java常见面试题_2022最新版

    序号内容链接
    1Java基础面试题https://blog.csdn.net/weixin_46030002/article/details/126399353
    2Java集合容器面试题https://blog.csdn.net/weixin_46030002/article/details/126425298
    3Java线程面试题https://blog.csdn.net/weixin_46030002/article/details/126518395
    4Java异常面试题https://blog.csdn.net/weixin_46030002/article/details/126482778
    5Spring常见面试题https://blog.csdn.net/weixin_46030002/article/details/127281194
    6SpringMVC常见面试题https://blog.csdn.net/weixin_46030002/article/details/127057785
    7Mybatis常见面试题https://blog.csdn.net/weixin_46030002/article/details/126026561
    8MySQL常见面试题https://blog.csdn.net/weixin_46030002/article/details/126557564
    9Redis常见面试题https://blog.csdn.net/weixin_46030002/article/details/126435834
    • Java常见面试题_2022最新版持续更新中…

    文章目录

    • Java常见面试题_2022最新版
      • 一、线程基本概念的了解
        • 什么是同步,什么是异步
        • 并发和并行的区别
      • 二、常见面试题
        • 线程和进程的区别(什么是线程,什么是进程)
        • 线程有哪几种状态,分别是什么
        • 启动线程需要调用什么方法
        • 线程调用 start 方法,处于什么状态
        • 线程中 run()和 start()有什么区别
        • 创建线程有哪几种方式?简述特点
        • sleep 和 wait 的区别
        • 说说对锁的理解
        • 什么是死锁(-)
        • 如何避免死锁的发生(-)


    一、线程基本概念的了解

    什么是同步,什么是异步

    • 同步:任务顺序执行,在上一个任务未执行完成之前下一个任务等待执行,顺序执行,一个执行完成才能继续执行下一个任务
    • 异步:当上一个任务未完成之前,不需等待结果,继续执行后续的任务。

    并发和并行的区别

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

    并行:一群人分别在不同的售票窗口买票(排成多列)
    并发:一群人在一个售票窗口排队买票(排成一列)

    二、常见面试题

    线程和进程的区别(什么是线程,什么是进程)

    线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。多个线程可共享同一个数据,共用所在进程的那一块内存空间。
    进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间。windows 中一个 运行的 .exe 就是一个进程

    一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。

    线程有哪几种状态,分别是什么

    • 新建(new)
    • 就绪(可运行runnable)
    • 运行(running)
    • 阻塞(blocked)
    • 死亡(结束dead)

    启动线程需要调用什么方法

    start()

    线程调用 start 方法,处于什么状态

    调用 start() 时处于就绪状态,当时间片分配到本线程时,才从就绪状态变为运行状态

    线程中 run()和 start()有什么区别

    start() 方法用于启动线程
    run() 方法只是用于执行线程的运行时代码。

    创建线程有哪几种方式?简述特点

    1. 继承 extends Thread
    2. 实现 implements Runnable
      • 重写 run() 方法
    3. 实现 implements Callable
      • 重写 call() 方法
    • 继承 Thread

      public class MyThread extends Thread{
          @Override
          public void run() {
              System.out.println("执行线程...");
          }
      
          public static void main(String[] args) {
              Thread t = new MyThread();
              t.start();
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 实现 Runnable

      public class MyRunnable implements Runnable{
          @Override
          public void run() {
              System.out.println("执行线程任务...");
          }
      
          public static void main(String[] args) {
              Runnable r = new MyRunnable();
              Thread t = new Thread(r);
              t.start();
              // new Thread(r).start(); // 还可以这样写
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    • 实现 Callable

      public class MyCallable implements Callable<Integer> {
          @Override
          public Integer call() throws Exception {
              System.out.println("执行线程...");
              return 10;
          }
      
          public static void main(String[] args) {
              Callable c = new MyCallable();
              FutureTask<Integer> f = new FutureTask(c);
              Thread t = new Thread(f,"有返回值的线程对象名字");
              t.start();
              try {
                  System.out.println("线程的返回值 : " + f.get());
              } catch (InterruptedException e) {
                  e.printStackTrace();
              } catch (ExecutionException e) {
                  e.printStackTrace();
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21

    继承 Thread 比较有局限性,因为 Java 中是单一继承,多实现。我们一旦继承了 Thread 类就没办法继承其他父类了,这样不利于代码开发,而且数据就会变成线程所独享的了;
    而如果实现了 Runnable 接口,不仅可以继续继承其他的类,而且可以把数据变成所有线程共享的,将线程任务放到线程中运行即可。
    实现 Callable 可以通过 FutureTask 对象 get() 方法获取执行线程任务结束后的返回值,但是相对于 Thread 来讲,编程较为复杂。

    sleep 和 wait 的区别

    都是暂停的状态,都会让出CPU时间片,

    • 类不同:
      • sleep() 是线程 Thread 的静态方法
      • wait() 是 Object 类的方法
    • 对于锁的释放:
      • sleep() 不释放锁,没有释放被占用的这个资源,其他线程不能使用这个资源
      • wait() 释放锁,需要 notify 或者 notifyAll 才能唤醒当前线程
    • 用途:
      • sleep() 暂停执行
      • wait() 通常被用于线程间的通信
    • 用法:
      • sleep() 任何地方都能使用
      • wait() 只能用在同步方法或者同步块中

    说说对锁的理解

    锁是为了实现共享资源的同步,防止多线程并发情况(多线程可能对同一数据同时操作,导致数据出现异常),所以有了锁机制(synchronized,Lock);

    什么是死锁(-)

    当线程 A 持有独占锁 a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。

    如何避免死锁的发生(-)

    (1)持有多个锁的话,锁的顺序要一致
    (2)尽量避免锁的嵌套
    (3)持有锁的方法尽量不要引用外部对象,可能外部对象也持有你的锁,会造成死锁

    • 持久更新中…
  • 相关阅读:
    软件测试肖sir__python之ui自动化实战和讲解(03)
    【Python基础】多值参数 || 计算多个数字的和 || 元组和字典的拆包 || 面向过程开发 || 面向对象基本概念:类和对象的关系、大驼峰命名法
    采用QT进行OpenGL开发(一)绘制平面图形
    23062C++&QT day2
    Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形
    matlab入门基础笔记
    Python时间戳和日期格式之间的相互转化
    JVM垃圾回收
    Vue源码分析(高阶函数)
    关于RISC-V安全性的全面综述
  • 原文地址:https://blog.csdn.net/weixin_46030002/article/details/126518395
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号