字节面试官:关于“Java多线程的理解和创建”问题,死盯不放!

字节三面:Java多线程夺命连环60问,被面试官怼的怀疑人生 前言 现在不管是大公司还是小公司,去面试都会问到多线程与并发编程的知识,大家面试的时候这方面的知识一定要提前做好储备。 全部的面试题内容和参考答案都整理成文档了(在文末) 1.多线程有什么用? 发挥多核CPU 的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。 单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一 阅读详情

在这里插入图片描述

进程和线程

**什么是进程

程序是静止的,运行中的程序就是进程。

进程的三个特点:

1.动态性:进程是运行中的程序,要动态的占用内存,CUP和网络等资源。
2.独立性:进程与进程之间是相互独立的,彼此有自己的独立内存区域。
3.并发性:是指同一个时间段内多个任务同时都在执行,并且都没 有执行结束。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行 。

并行:同一时刻同时有多个在执行


什么是线程?

–线程属于进程,一个进程可以包含多个线程,这就是多线程。
–线程是一个独立执行的单元。
–线程占用CUP相对于比进程小。
–线程也支持并发性。

image

进程和线程的区别

进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,有一个或多个线程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小。

线程的作用:

–可以提高程序的效率,线程也支持并发性,可以有更多机会得到CPU。
–多线程可以解决很多业务模型(比如12306买车票)。
–大型高并发技术的核心技术。

注意:设计到多线程的开发可能都比较难理解。

线程的创建方式

线程的创建方式:

实现Runnable接口:

–1.创建一个线程任务实现类实现Runnable接口

public class ThreadDemo01 implements Runnable{}

–2.重写run()方法

@Override
public void run() {
   //run方法线程体
   for (int i=0;i<10;i++){
      System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
}

–3.创建一个线程任务对象

ThreadDemo01 threadDemo01 = new ThreadDemo01();

–4.把线程任务对象包装成线程对象

//方式一:
Thread t1 = new Thread(threadDemo01);
t1.start();

//方式二:
new Thread(threadDemo01).start();

//方式三:
Thread thread = new Thread(threadDemo01,"线程2");
thread.start();

–5.调用线程对象的start()方法启动线程

new Thread(threadDemo01).start();

实例:

//1.实现Runnable接口
public class ThreadDemo01 implements Runnable{
    //2.重写run()方法
    @Override
    public void run() {
        //run方法线程体
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
        }
    }

    public static void main(String[] args) {
        //创建Runnable接口的实现类对象
        ThreadDemo01 threadDemo01 = new ThreadDemo01();
        //线程使用方式一:
        Thread t1 = new Thread(threadDemo01);
        t1.start();
        //线程使用方式二:
        new Thread(threadDemo01).start();

        //线程使用方式三:
        Thread thread = new Thread(threadDemo01,"线程2");
        thread.start();
    }
}

实现Runnable接口创建线程的优缺点:

**缺点:**代码复杂。
优点:
–线程任务类只是实现了Runnable接口,可以继续继承其他类,而且可以继续实现其他接口(避免了单继承的局限性)
–同一个任务对象可以被包装成多个线程对象

//例子
Thread t1 = new Thread(threadDemo01);
Thread t2 = new Thread(threadDemo01);

–适合多个相同的程序代码的线程去共享同一个资源
–实现了解耦操作,代码可以被多个线程共享,代码和线程独立
–线程池可以放入实现Runnable或Callable线程任务对象

注意:Thread类本身也实现了Runnable接口

线程简化写法:

new Thread(new Runnable() {
  @Override
    public void run() {
      for (int i=0;i<10;i++){
        System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
      }
  }
}).start();

五大状态

线程五大状态:

image

image

线程常用的方法:
方法名说明
setPriority(int newPriority)更改线程的优先级
static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠
void join()等待该线程终止
static void yield()暂停当前正在执行的线程对象,并执行其他线程
void interrupt()中断线程
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素个数
indexOf(Object o)查询指定元素的位置 lastIndexOf也一样,只是从尾部开始遍历

分类: [Java基础]

在这里插入图片描述

只会CRUD的我,是如何横扫一切多线程问题,吊打面试官的呢? 写在前面 提起多线程编程,恐怕许多开发人员都会摇头表示不懂。确实,在校生和刚就职的开发人员往往很少有机会能够实现多线程编程。多数情况下,他们都是在开发框架下编写单线程的业务代码,而多线程的部分则被封装在了框架内部。即使是经验丰富的开发人员也会感叹他们曾经在多线程上栽过的跟头。但不可否认的是,多线程的确是一把利器 ,活用多线程有助于提高程序的响应性和吞吐量。可以毫不夸张地说,多线程是开发人员在继续“升级”的过程中必须打倒的一只“怪物”。 “设计模式”一词也常常会让开发人员感到畏惧。其实设计模式不过是对代码 阅读详情

相关推荐

字节面试官:java读取json文件并解析

缓存维护方案一 如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示: 1.线程A发起一个写操作,第一步del cache 2.线程A第二步写入新数据到DB 3.线程B发起一个读操作,cache miss缓存失效了。 4.线程B从DB获取最新数据 5.线程B执行set cache,把从DB读到的数据,更新到缓存。 「这样看,没啥问题」。我们再看第二个流程图,如下: 1.线程A发起一个写操作,第一步del cache 2.此时线程B发起一个读

m0_57431076的博客 869

android架构师之路!金三银四Android高级工程师面试题整理,真香!

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

m0_56175058的博客 446

大厂真题:面试官非常喜欢抛出的问题,看你自由发挥,你能讲多深?

下面这几招,你能接住几招? 请描述synchronized和reentrantlock的底层实现以及重入的底层原理 ----百度,阿里。 请描述锁的四种状态和升级过程 ----百度,阿里。 CAS的ABA问题如何解决 -----百度。 请谈一下AQS,为什么AQS的底层是CAS + volatile ----百度。 请谈一下你对volatile的理解 ----美团,阿里。 volati...

lyztyycode的博客 3222

java多线程

java 多线程 1、进程,在我们的操作系统中,没打开一个软件,就占有系统一个进程,来执行这个软件的程序。 2、进程,一次程序整体执行就是一个进程。 3、线程,一个进程中的多个分支,每一个分子程序就是一个线程。 4、不管是多进程还是多线程,都是为了同时可以完成多任务操作。 5、对操作系统来讲,支持多任务,起多个进程代表系统中的多个应用程序。

343

西电微机系统课程设计步进电机开环控制系统

** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一、程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50...

qq_37015775的博客 4040

Python自动化批量识别化学分子结构——从图片到SMILES/SDF的实战指南

本文提供了使用Python自动化批量识别化学分子结构图片的实战指南。详细对比了基于Molvec API的在线快速方案与本地部署OSRA工具的两种路径,包含完整的代码示例、环境配置及优化技巧,帮助化学研究者高效地将图片批量转换为SMILES或SDF格式,显著提升数据处理效率。

apple5的专栏 947

阿里字节面试题,多线程打印程序

github地址:https://github.com/ivileey/leecode_practice 个人博客地址:https://www.yner.top/ 设计一个多线程打印程序,第i个线程只打印i-1数字,比如第1个线程打印数字0,第2个线程只打印数字1,依次类推。 任意给定一个数字序列,比如3382019835830,能够使用该程序打印出来。 思路:创建10个线程每个线程分别只打印0-9的数字。主线程通过一个candidate数组来通知哪个线程改打印了。主线程等待线程打印完之后设置下一个要打印的

nishuiaee的博客 487

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2298

2020年最新阿里、美团、字节跳动等大厂多线程面试题及答案汇总

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 需要更多Java其他知识点的面试题及答案的老铁,请转发+关注,然后私信回复“面试”即可获得免费领取方式。 1、多...

一入Java深似海 1120

Nacos2.3.0与vastBase数据库的集成实践指南

本文详细介绍了将Nacos 2.3.0的默认数据库从MySQL迁移至vastBase数据库的完整实践指南。内容涵盖前期环境准备、源码改造、依赖配置、SQL适配、数据库初始化以及最终的编译打包与部署验证,旨在帮助开发者在国产化或特定技术栈场景下,实现微服务配置中心与vastBase数据库的自主可控集成。

plant的博客 275

西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践

本文详细解析了西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践。通过实际案例和代码示例,介绍了状态机的基础认知、硬件配置、逻辑开发、调试技巧以及与MES系统集成的高级应用,帮助工程师高效实现设备自动化控制。

weixin_29255731的博客 535

你都有哪些面试时被虐的经历?

挖出这个三年前的问题,就为吐槽今天字节跳动的面试。人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的。我一听, 呀?那我这岂不是就不优秀了吗,于是毅然...

java面试笔试 1万+

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

数据采集(监听)、持久化(I/O)与可视化展示,必须是三个完全独立的模块,这符合单一职责原则。在多线程读写 Python 字典时,锁住的时间要尽可能短,防止 I/O 线程把高频的监听线程阻塞住。这类涉及底层的代码与“键盘记录木马”只有一线之隔。永远不要把击键记录通过网络上传,所有数据必须localhost消化。人脑对枯燥的 JSON 日志是不敏感的,但对颜色和空间极其敏感。这也是为什么 Prometheus + Grafana 是标配。使用ctypes。

BUG猿的博客 194

“大三在读生”都四面成功拿到字节跳动Offer了,你还有什么理由去摸鱼?

博主大三在读,投的是字节 Data 的后端开发实习生,base 杭州。 时间线: 4.12 投递 4.13 安排简历筛选 4.14 安排面试 4.19 16:00 一面 4.22 16:00 二面 4.23 8:00 三面 4.23 16:00 HR 面 4.23 16:30 Offer 一面 先做了自我介绍 问论文情况(简历写了) 做的是什么 主要负责了哪些工作 数据集是哪里来的 带来的提升是以什么为基线去比较 来做个题吧:有向图判断是否有环 .

kxkxyzyz的博客 2万+

Ollama本地大模型-个性化AI:训练自己的风格模型和数据投喂打造专属智能体验

之前我们使用Ollama下载了deepseek模型,现在我想将其训练成自己风格的模型,应该怎么做?

瑶山的博客 1784

RK AVS双目融合记录

NOTE] 调试平台双目avs融合调试,需要先保证两个摄像头能正常出图同时出流。使用默认工具测试vi->avs->venc通路是否正常,-a可指定isp效果文件需要开启CONFIG_VIDEO_ROCKCHIP_AVSP和CONFIG_VIDEO_ROCKCHIP_FEC,dts中使能。

mangofu的博客 106

跟Java面试官对线的一天!唬住就要50K,唬不住就要5K

个人面经前言JVM篇计网篇Java基础篇多线程篇Spring框架篇MyBatis框架篇MySQL篇Redis篇 前言 不积跬步无以至千里,不积小流无以成江海 终于呀,怀着期待的心走进了公司的大门,迎面而来的就是一个小姐姐。 hr:您好,请问你是今天过来面试的吗? 我:哇,这里的小姐姐都这么漂亮吗。嗯,你好,我是今天来面试的。 hr:嗯,那你先简单的做个自我介绍好吧。 我:(以下自我介绍是自己的) 嗯,好的。面试官你好,我叫彭于晏,毕业于XX大学。今天来面试贵公司的Java开发。我从事这个行业已经两年

一条会编程的鱼 8935

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

字节跳动面试官问了我源码,然后就没有然后了!

最近,我的一位朋友在找工作,已经拿到了美团、快手等公司的Offer,准备选择其中一家入职了。后来他又接到了字节跳动的电话,通知他去参加三面。从二面到三面之间隔了挺久的,他...

weixin_43167418的博客 422

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

面试官:“为什么你多线程回答的这么流畅且自信?” 网友偷笑:“因为我早有准备。”

一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然”,只有达到”知其然知其所以然”的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: 1、多线程有什么用? 发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就

w1103576的博客 3977

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

但凡面试官考“多线程”,一定会问这10个问题!

随着技术人才大幅增长以及公司招聘更加严苛,程序员的职场正面临着前所未有的激烈竞争。以Java为例,不仅要了解操作系统、掌握JVM等知识点,还要深耕数据结构与算法,掌握Spring全家桶等框架。 而在这其中,对于并发与多线程的处理,也是一个优秀的技术工程师成长过程中必须攻下的难关。它贯穿着日常工作,也是入职面试重点考察的重点。 我们用5分钟复习一下并发与多线程。 01知识点汇...

weixin_30629653的博客 405

字节跳动面试官:中国java最厉害的人

前言 我在知乎上看到这样一个话题,关于程序员的: 听同学说干码农这行每天都要加班,这样的话,不就没精力做别的事情了。有个师兄做 IT 销售,不太辛苦,生活还算是美滋滋,是真的吗?我也知道社会上干哪一行都不容易,可是好像码农生活确实单调无聊。天天敲代码,日常嗨一嗨都没时间,更别说有精力谈恋爱了。想问问正在工作的各位前辈,你们的生活是怎么样的? 开门见山、开诚布公地说吧,我是一个对技术没有很大热情的程序员。这样说会不会遭到一些同学们的 DISS?不管了,反正我知道一不小心又甩了两个成语,感觉自己挺有才华的。

m0_57286571的博客 621

面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!

最近好多粉丝私信我说在最近的面试中老是被问到多线程和高并发的问题,又对这一块不是很了解,很简单就被面试官给问倒了,被问倒的后果当然就是被刷下去了,因为粉丝要求,我最近也是花了两天时间 给大家整理了这一份Java多线程和并发的面试题,看完之后去手撕面试官! 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的

欢迎您访问我的公众号【前程有光】 530

2024Java不死我不倒,字节面试官必问的Mysql锁机制

第二次去京东面试因为准备的时间比较长,所以面试问题基本都在意料之中,最终也成功拿下了京东的offer,可喜可贺!先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

2401_83641443的博客 815

字节跳动2面、美团2面Java面试真题总结

面试真题来源自网络…… 前言 宅在家里快两个月的在家办公模式基本告一段落。企业复工,大家的工作生活终于可以回归正轨,相信不少朋友已经走出家门,迎战跳槽季了。一些动作快的朋友可能已经拿到一两个 Offer 了。 那么,对于Java开发岗来说,到底该如何准备技术面呢? 其实,除了表达能力和面试技巧外,无非就从这几个方面进行准备:源码阅读、JVM、高并发,分布式、集群、中间件,微服务架构等。 下面是最...

张三与王二麻子 6016

java多线程锁面试题,看懂这些帮你轻松解决就业问题年薪50万不是梦

面完蚂蚁后,早就听闻拼多多这个独角兽,决定也去面一把。首先我在脉脉找了一个拼多多的HR,加了微信聊了下,发了简历便开始我的拼多多面试之旅。二面老大面完后就直接HR面了,主要问了些职业发展、是否有其他offer、以及入职意向等问题,顺便说了下公司的福利待遇等,都比较常规啦。不过要说的是手上有其他offer或者大厂经历会有一定加分。拼多多的面试流程就简单许多,毕竟是一个成立三年多的公司。面试难度中规中矩,只要基础扎实应该不是问题。

2401_84413490的博客 1166

面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!

Java内存模型讲到这里,也就差不多讲完了,其实中间还有缓存一致性协议JSR-133文档volatile等关键字可以展开说一说,但那样篇幅太长,而且内容多乏味,就一笔带过了,感兴趣的小伙伴自己去网上搜一些博文看看吧。

JavaBuild的博客 897
上一篇: 什么?学Java这么久了,你连MySQL怎么安装都还不知道!安排!
下一篇: 关于如何解决java线程安全问题?很重要? 快拿小本本记下来!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值