- 博客(17)
- 收藏
- 关注
原创 JavaEE——多线程代码案例1:单例模式
(但是“调用getInstance”这个操作的时机不可知,要看程序的实际需求: 1)大概率比“饿汉模式”晚一些2)甚至可能整个程序压根用不到这个方法——用不到这类,因此也就把创建的操作省下来了)如果instance已经创建过了,此时后续再调用getInstance,就都是纯粹的读操作了,不会有线程安全问题,直接返回Instance实例。实例是在程序一启动、类加载的时候就创建了(因为是static修饰的,类属性),创建时机非常早,相当于程序一启动,实例就创建了。多线程下,指令从排序,就可能引入问题!
2024-12-16 21:14:31 1086
原创 JavaEE初阶——多线程(等待-通知机制:wait-notify)
—能够从应用层面上,干预到多个不同线程代码的执行顺序。相当于是在应用程序代码中,让后执行的线程,主动放弃被调度的机会,就可以让先执行的线程,先把对应的代码执行完了。【用途】——场景:【线程饿死/线程饥饿】拿到锁的线程,由于条件不足,无法执行后边的代码,释放锁之后,也参与锁竞争。此时,完全有可能导致,该线程反复获取锁,但是又无法完成实质性的逻辑。其他线程又无法拿到锁。这个情况,就称为:线程饿死/线程饥饿——可能性:【概率】这种情况出现的概率还是挺高的。
2024-12-14 19:18:35 1218 1
原创 JavaEE初阶——多线程(线程安全-锁)
如果没有这个特性——比如C++,用的std::mutex锁,就是不可重入的,一旦以上代码出现阻塞,无法自动恢复,所以这个线程就卡死了 ~ ~(这里出现的卡死,就称为“死锁”)因此,设计JVM和编译器的大佬就引入这样的优化能力,在优化的加持下,就能让你即使写不出太高效的代码,最终的执行效率也不会太差 ~ ~ ~注意:这几个类,都是标准库即将弃用的 ~ ~现在暂时还保留着,未来某一天新版本的jdk可能就把这些内容删了 ~ ~所以,在写新的代码的时候,就尽量别用了,不推荐 ~ ~(所以,要想办法避免 ~ ~)
2024-12-11 20:16:51 1203
原创 JavaEE初阶——多线程4(线程安全 和 解决办法(synchronized))
类对象中,是对这个类的各种信息的描述(类名,包含哪些属性,每个属性的名字,有啥参数,参数是啥类型/public/private…但是,并非是加锁之后,执行三个操作的过程中,线程就不调度了(仍然是是随机调度,随时可能会从CPU上下来) ~ ~上述代码中,两个线程中都是用到了t实例调用加锁的方法,锁中用到锁对象,其中的this,都是指的t这个实例,所以是同一个对象,所以会存在锁竞争!而count++,包含多个CPU指令,一个线程执行这些指令,执行到一半,可能会被调度走,从而给其他线程“可乘之机”。
2024-12-07 17:00:56 1330
原创 JavaEE初阶——多线程3
肉眼能看到的程序,90%以上都会用到多线程。【原因】当前CPU是一个多核新的CPU(1)如果是一个单线程的程序,这个程序最多只能把一个CPU核心吃满 ~ ~剩下的CPU核心就(2)引入多个线程,每个线程负责完成其中一部分工作 ~ ~提高了CPU的利用率 ~ ~【举例】比如LOL这种游戏 ~ ~其中,某些线程,去负责画面的渲染,有些线程负责游戏背后的逻辑,有些线程负责网络通信,有些线程影响用户的操作……
2024-12-06 22:36:40 801
原创 JavaEE初阶——多线程2
变量捕获本质上就是传参,换句话说,就是让lambda表达式在自己的栈帧中创建一个新的isQuit,并把外面的isQuit的值给拷贝过来 ~ ~(为了避免里外的isQuit的值不同步,Java干脆就不让isQuit修改)事实上,有些变量名,不用拼音不行。多个线程的执行顺序是不确定的(随机调度,抢占式执行)(另外,线程的执行时间也是无法预估的,尤其是线程要进行的是一串复杂的耗时的运算)使用多个线程并发执行一系列的计算,用一个线程阻塞等待上述计算线程,等到所有的线程都计算完了,最终这个线程汇总结果 ~ ~
2024-12-02 18:11:54 1086
原创 JavaEE初阶——多线程
线程—是级的进程操作线程Java中提供的多线程的api:Thread类基于Thread类,就可以编写一个多线程的代码了run 是线程的入口。(每个线程跑起来都会执行一些逻辑,写在这里边)操作系统 的操作系统 = 内核(操作系统最核心的部分) + 配套的应用程序(运行在内核之上,完成用户各种需求)操作系统 的 内核 ——(完成相关的工作:1.管理硬件,如:显示器,键盘,鼠标,网卡,扬声器,麦克风 2.给软件提供稳定的运行环境,如:创建进程、线程、管道、文件)
2024-12-01 15:00:40 1300
原创 阶段性联系(纠错版)
(1)操作系统以进程的方式维护运行中的程序,并通过PCB中的一些属性(比如:优先级、记账信息、状态等)完成对进程的调度。(3)了解一下操作系统的定位,操作系统是计算机的最高管理者,管理所有的计算机资源,包括文件系统,协调硬件工作。关于指令周期,描述的是指从从创建到销毁的整个过程,结合题目就是指CPU取出指令并执行完成所用的全部时间。(2)应用程序在运行时向操作系统申请各种资源,其中就包括内存,所以内存管理也是操作系统的重要工作之一。(4)配置CPU电压是主板的一个功能,不属于操作系统的范畴。
2024-11-29 10:47:06 180
原创 JavaEE初阶——操作系统(Operating System)3
尤其是对于Java进程,是要启动Java虚拟机——JVM的,这个事情的开销,更大,每个进程都要对应一个各自的Java虚拟机,每个独立的进程都会启动一个单独的 JVM,一个Java程序可以对应多个进程,然后一个进程又可以包含多个线程,一个 Java 程序默认情况下运行在一个 JVM 进程中,详细可以看一下这个:https://juejin.cn/post/6844903881063792647)一般来说,申请内存的时候,需要指定一个大小,系统内部就把各种大小的空闲内存,通过一定的数据结构,给组织起来了。
2024-11-26 22:31:32 743
原创 JavaEE初阶——操作系统(Operating System)2
每个进程,都必须使用自己申请到的内存(一亩三分地——(这种词,可以让充满专业术语的枯燥的文章中,似乎多一些“色彩”,也能更多一些“记忆点”,还能帮助更好的理解,也更简单精炼))1)早期单任务系统的手机,装的QQ,是J2ME写的非常古老的版本,必须要打开QQ程序,才能收到消息(比如想切换到百度贴吧,就需要退出QQ,此时,QQ是没法收到消息的)选中某个进程,并且点击结束任务,此时,就是任务管理器获取到你选中的进程的pid,然后调用一个系统api,把pid作为参数传进去,从而完成治理的杀死进程的操作 ~ ~
2024-11-24 16:56:28 640
原创 JavaEE初阶——操作系统(Operating System)
*==>**程序猿写代码的时候,就可以不必关注硬件的细节差别了 ~ ~只需要调用操作系统的api即可 ~ ~再由操作系统来控制不同的硬件进行工作。另外,C++标准库中,很多应该有的功能都没有,只能学习体统原生的api(系统有很多种,Windows,Linux,……(原因:1.C++官方(标准委员会)2.第三方缺少像Java这边Apache,spring这种强力的开源社区 ~ ~)因此,咱们程序猿写代码,不需要面向硬件,只需要面向操作系统即可 ~ ~硬件非常多,但是,操作系统,就这么几个主流的 ~
2024-11-23 12:07:31 318
原创 JavaEE初阶——CPU
1.90Hz——一秒钟进行19亿次(这里的“亿次”,严格地说叫做“时钟周期”,近似地看成,执行19亿条指令 ~ ~大部分的指令,一个时钟周期差不都就能搞定 ~ ~ 很明显,这个运算速度是极快的!假定,从内存的0号地址开始执行程序,CPU就会先从0号地址这里读取数据,到CPU寄存器,并且对这个指令进行 解 析 ~ ~(解析:查询指令表,看看这个指令要干啥 ~ ~)执行顺序:默认情况下,CPU执行内存中的指令,是“顺序执行”的 ~ ~一条条的“往下走”,从内存中读取指令,并解析 ~ ~
2024-11-23 11:12:47 474
原创 JavaEE初阶——计算机的基本构成
后来芯片换了,不支持x86这一套了,原来的程序当然也就用不了了(苹果刚出M1芯片的时候,很多程序都不兼容M1芯片 )其设计很难,批量制造更难。咱们所谓的“编程”,其实就是通过编程语言,描述出一些逻辑,这些逻辑最终被转换成CPU能识别的指令最终执行 ~ ~)(“指令”——编程语言,分成三个大类:1.机器语言2.汇编语言,就是二进制指令,使用简单的英文单词替换的结果,和机器指令一一对应3.高级语言)ARM架构的特点,更适合这种低功耗 的机器上 ~ ~(手机)比如:苹果电脑的续航,再笔记本中,独一档 ~ ~
2024-11-22 19:32:15 134
原创 JavaEE初阶——初步认识
这样的解决方案,对PHP形成降维打击,PHP想做出类似调整,为时已晚,目前PHP基本可以宣告凉凉了(很少有商业公司用PHP了,链家、百度,还有一下老的项目还是用的PHP)感觉可以理解为Java世界中的各种“基础设施”,这些设施,也是需要随着Java语言世界的发展逐步完善、根据需求实际应用场景需求逐步产生,逐步添加的~~微软釜底抽薪,让IE封杀“功臣”Java(不能运行Java了),意欲扶持自家编程语言VBScript上位——但是,VBScript不中用啊~~Java:如何挣扎求生?
2024-11-22 18:36:28 259
原创 idea连接MySQL
MySQL5的setUrl是“jdbc:mysql://127.0.0.1:3306/java107?下载网站:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.49。2.在需要操作MySQL的idea工程中,src同级别目录下,创建一个“Directory”(一般命名为“lib”)2)MySQL8的setUrl是"jdbc:mysql://127.0.0.1:3306/student?选择需要的版本下载下来,但是不要解压。
2024-11-09 20:13:44 408
原创 初识数据库和MySQL
客户端输入密码才能连上服务器,如果密码忘了,就需要重装了(提醒:MySQL的卸载有点麻烦。(有些服务器可以“停服维护”,比如,12306,23点之后买不了票,23-7停服维护,但是不适用于大多数情况)服务器:server)(客户端和服务器可以在同一个主机上,也可以在不同主机,工作中通常是不同主机,学习过程,一般是同一主机)安装好MySQL之后,就是安装了MySQL的客户端和服务器(客户端和服务器都在你同一个电脑上)而MySQL客服端,只是一个和用户交互的界面,只是让用户能够通过客户端,给服务器“发送指令”
2024-11-02 22:07:57 412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人