- 博客(28)
- 收藏
- 关注
原创 线程通讯的三种方法(线程的等待和唤醒功能)
1.wait()/wait(long timeout):线程进入休眠2.notify:随机唤醒进入休眠状态的线程3.notifyAll:唤醒所有处于休眠状态的线程注意事项:以上三种方法都必须配合synchronized一起使用,否则会报错。
2023-01-15 10:25:40
1088
原创 线程安全问题中手动锁(LOCK)
Lock实现步骤:Lock基础用法: 接下来我们使用Lock来解决当时出现的问题执行结果: 总结:注意事项: 接下来我们使用Lock来解决当时出现的问题执行结果: 接下来我们花点时间来看看为什么需要放在try前面?代码:执行结果如下:改正之后执行代码如下: 结果如下:
2022-11-19 21:59:23
458
原创 【面试必问】Synchronized底层实现原理和运行流程
在Java中,Synchronized是非公平锁,也是可重入锁我们先来介绍一下公平锁:一定要执行的步骤:1.上一个线程释放锁之后执行唤醒2.最前面的线程从阻塞状态又切换到运行状态那么我们在简要的概述一下非公平锁,我们的非公平锁并不需要在执行的时候进行排队等待,只要该线程再来的时候占用锁资源的线程刚好释放锁,那么该线程就可以立刻执行,而不需要等待排序。synchronized 同步锁是通过 JVM 内置的 Monitor 监视器实现的,⽽监视器⼜是依赖操作系统的互斥锁Mutex 实现的。
2022-11-19 10:58:12
405
原创 关于多线程中线程不安全问题中内存可见性问题以及指令重排序问题如何解决多线程中的这两个问题(volatile)
我先在类中定义了全局变量,之后我在主方法中定义两个线程,第一个线程让她去重复执行,while空循环,我们在第二个线程里尝试着去修改全局变量,让他能够导致第一个线程的停止执行,并最终输出一句话,我们可以看出来,线程1一直在执行,她并没有感知到我们的一个全局变量flag的一个修改,但我们从截图上可以看出来,并没有做到这一点,程序也一直不会退出执行,这就是。其他地方完全不变,接下来大家仔细看,结果就会不一样!我们只需要在我们的全局变量上修改,只需要将全局变量用。volatile修饰。
2022-11-17 21:51:33
366
原创 开发模型 and 测试模型(详细整理包含敏捷模型、V模型等)
在概述开发模型之前我先大概说明一下软件开发的生命周期软件开发的生命周期:需求分析--计划--设计--开发--测试--运行维护。(1)瀑布模型特点: 阶段性强,每一个阶段比较独立,看重前期的需求分析和后期的测试缺点:测试在编码之后才进行介入,导致前期的问题后期才会发现,会失去错误补救的机会(2)螺旋模型螺旋模型适合于项目庞大,风险大不是很明确的项目特点:强调每一个迭代的测试质量和风险分析缺点:风险管控人力物力投入很多,成本比较的大(3)增量模型,迭代模型。
2022-11-16 17:59:31
348
原创 关于测试用例和测试用例的优点以及什么是BUG?
当且仅当,程序规格说明书(软件需求 )存在并且合理,如果软件功能和软件规格说明书不想符合,我们就说是一个软件错误。当软件需求不存在,用户需求存在并且合理,软件功能和用户功能不相符合,就说明是软件错误。为什么会反复的来强调合理的字眼?因为我们的软件测试阶段是贯穿在整个软件的开发的生命周期,需求阶段就会介入,验证需求的合理性以及正确性。
2022-11-16 16:40:23
269
原创 【面试题】关于线程的几种状态以及线程状态的转变
今天到现在这是第二篇文章了,总是会在怀疑自己,总觉得是不是写的不够清楚给读者看的话,每天都会在意很多事情,其实我想说,自己蛮不错的,今天还改了优快云的昵称,是开心的,希望我写的文章可以帮助到很多初学者!今天也听到一个很有感触的话,道阻且长,行且将至,只要能开始,我想说任何时候都为时未晚!加油!!
2022-11-12 20:37:09
459
1
原创 浅谈一下多线程都有哪些休眠方法,以及如何休眠当前的线程
关于线程的休眠方法这件事,我们最最熟悉的肯定是之前就一直在用的sleep方法,那么我今天想告诉大家的是其实sleep方法不一定就会执行相应的休眠时间,关于sleep以及interrupt方法的溯源,我们用一段代码来看。
2022-11-12 10:15:51
765
原创 Java多线程经典面试题:编写代码,实现多线程大数组求和的问题(简单实现)
如果不是全局的变量,那么在lambda表达式中修改的时候会报错,lambda表达式中不允许修改变量。1.给定一个很长的数组(长度1000w),通过随机数的方式生成1-100之间的整数。3.其中线程1汇总计算偶数下表元素的和,线程2计算汇总奇数下标元素的和。2.实现代码,能够创建两个线程,对这个数组的所有元素求和。方法2:创建两个带有返回值的线程,将这两个返回值累计即可。方法1:我们使用两个不带有返回值的线程,这样我们就需要。4.最终在汇总两个和,进行相加。5.记录程序的执行时间。
2022-11-11 20:16:19
737
原创 Java程序员多线程的常用方法(很重要,稍微难理解,我用最清楚的大白话说)
1.相比于我们之前用的isActive()方法判断此时这个线程是否活跃,join()写法比较优雅。2.join()底层的实现是靠wait阻塞线程的执行,wait消耗CPU的资源较少。join():等待某个线程执行结束以后在执行后续的代码。
2022-11-10 17:01:05
1037
1
原创 Java程序员线程部分之线程的常用属性(状态、优先级用户线程守护线程等等都有~看完这篇可以豁然开朗)
首先我们在创建线程之后优先级就已经是存在的了,当线程执行结束的时候,优先级也是存在的,优先级是int类型的值,默认的优先级是5。通过查看源码可以知道,我们的5是处于中间位置的优先级,1是最小的优先级,10是最大的优先级。
2022-11-07 21:01:29
1081
原创 Java程序员之创建多线程的几种方式(三种方式、七种方法)
1.如果你是jdk1.8和之后的版本,不需要返回值的话可以考虑用lambda表达式来创建新线程2.如果需要返回值可以考虑用最后一种方法匿名callable接口。
2022-11-01 21:47:49
1663
原创 lambda表达式(看完这一篇就清楚啦)
使用的时候就是在大括号里不能更改变量的值。如果变量用final修饰更能保证他不被修改,在修改的时候就会报错,如果不使用final修饰,在lambda表达式的时候就会报错。理论上来说,只要你的接口中存在一个抽象方法,都算是函数式接口。Lambda 表达式不能直接使⽤,它在使⽤之前必须初始化,lambda 表达式必须借助。2.如果一个接口有且只有一个抽象方法,那么你可以将他理解为函数式接口,函数式接口可以用。lambda表达式在使用外部的变量时,必须要保证在使用之前变量。Lambda 表达式不能直接使⽤。
2022-10-31 20:05:33
573
原创 Java程序员用一篇文章教你学会枚举~
使用时最好加一个trycatch语句抛出异常。定义:主要表示一组相同业务的值;枚举类不可以继承,无法扩展。
2022-10-29 20:21:20
298
原创 Java进程和线程!!!(超级重要,用心整理)
1.1OS操作系统:操作系统是一组做计算机资源管理的软件的统称,目前常用的操作系统有:Windows系列,Unix系列(付费),Linux系列等等;记账信息里面会记录分配cpu的次数和执行间隔,作为cpu是否执行他的依据,而是否执行他是进程调度器决定的,记账信息只是提供给调度器参考信息。答:不是,如果创建的线程过多,就会造成狼多肉少的情况,就会造成恶意争抢和线程过度调度的问题的。(1)从属关系不同:进程是可执行的文件的实例,进程中包含了线程,,线程中不可以包含进程。每次打开新的进程都不一样。
2022-10-29 00:02:23
510
原创 关于反转链表这件事,我有话要说(附带牛客面试必刷100题中第一题BM1反转链表)(原地反转法)
我学会是因为看了下面这篇文章,我放在下面的链接里,博主写的超级好,帮了我很多大家有需要大家可以看看。【链表反转-2种java实现】
2022-10-18 14:21:44
316
1
原创 牛客笔试题NC24删除有序链表中重复的元素-II(超级详细解)
此题是关于我上一个博客的延伸,具体可以点击以下链接,本题目较上一个博客多了一个我们需要将重复的节点全部删除。而上一个题是说我们要将重复的节点保留一个。牛客笔试NC25。
2022-10-17 13:56:03
190
原创 MySQL基础操作(上) 看这一遍就够了~~~
1.MySQL 组成客户端 --控制台命令行工具(MySQL自带的命令行工具 包括在配置好环境变量后Windows系统自带的命令行工具) 服务器端--mysql服务2.服务器端包含的四个内容:数据库(相当于一个项目) 表(一个数据库对应了多张表) 字段(相当于java类中的属性) 数据(数据的填充)3.数据库可分为:关系型数据库:MySQL、DB2、OceanBase、Oracle、SQL server...... 非关系型数据库:Redis、Memcached(内存型数据库)、M
2022-03-06 00:14:53
144
原创 类和对象 Java
类:一个模板,有类才能产生对象(概念性的)类中包含了对象所具备的属性和方法class Person{//成员变量,实例变量,属性String name;int age;//成员方法,实例方法public void fun(){}}对象:类的具体实例化,根据类来产生对象,使用关键字newPerson per=new Person();看见new就有新空间,新对象。类中的构造方法:当产生对象时由编译器自动调用若我选择自己定义了构造方法,则默认的无参构造则不会生
2021-11-07 23:51:45
66
原创 2021-11-07 Java基础语法
1.数据类型的划分:(1)八大基本类型:保存的是该数据类型的值(数值) byte<short<int<long 默认值为0 eg:int a=10;a这个变量是整形保存的数值是10 float<double默认值为0.0 char 默认值为 /u0000 就是“ ” boolean 默认值为false(2)引用类型:数组、类、接口、枚举(默认值为null)一定注意:当一个引用的类型值为null时,无...
2021-11-07 18:42:31
138
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人