当前位置: 首页 > article >正文

java 进阶 1.0.3

Thread API说明
自己滚去看文档
CPU线程调度
每一个线程的优先使用权都是系统随机分配的,人人平等
谁先分配到就谁先用
也可以耍赖,就是赋予某一个线程拥有之高使用权:优先级
这样的操作就叫做线程调度
最基本的是系统轮流获得
java的做法是抢占CPU资源
优先级在java中是1-10,数字最大优先级越高
main()也是一个线程,被叫做主线程,他的值是5
main是优先执行的main,就是好像把别人的值设置的很大的时候也是先跑的main
但是有时候会发现自己设置的好像不管用,这是因为这里优先级的设置需要操作系统的支持,系统不一样有可能导致不准,因为执行的很快
所以以后在做多线程的时候,不要依赖多线程调度,除非是你这个线程执行的时间很长的时候,这个时候才能体会出一点多线程调度的样子,因为CPU执行的非常快,虽然你把优先级分好了,但是好像没啥卵用

public class Demo {public static void main(String[] args) {Thread maxPriority = new Thread(new MAXPriority(), "maxPriority");Thread minPriority = new Thread(new MINPriority(), "minPriority");maxPriority.setPriority(Thread.MIN_PRIORITY);minPriority.setPriority(Thread.MAX_PRIORITY);maxPriority.start();minPriority.start();}
}

运行结果确实没啥卵用


线程插队

public class Demo {public static void main(String[] args) {Thread thread_join = new Thread(new MAXPriority(), "MAXPriority");thread_join.start();for (int i = 0; i < 10; i++) {System.out.println(Thread.currentThread().getName());if (i == 3) {try {thread_join.join();} catch (InterruptedException e) {e.printStackTrace();}}}}
}

在这里插入图片描述
使用join可以实现无耻的插队
线程休眠

try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}

线程休眠, 让线程先睡一会再说
线程让步
有一种抢地主的感觉,说啥呢,这叫孔融让梨

public class MAXPriority implements Runnable {@Overridepublic void run() {for (int i = 0; i < 10; i++) {if (i == 5) {Thread.yield();System.out.println(Thread.currentThread().getName() + "现在开始线程让步");}System.out.println(Thread.currentThread().getName());}}
}

在这里插入图片描述
可以看到1执行了5次之后就开始执行2
打印没有让步快
因为线程太快了
线程状态还是斗地主吧
线程状态
New新建 -----> new Thread
Runbale可运行 --------> .start
Blocked阻塞
Waiting 等待
Timed waiting计时等待
Terminated终止

在这里插入图片描述
线程通信
线程调度高度依赖于操作系统
在这里插入图片描述
在任务管理器中可以设置进程的优先级
在线程调度中,一个线程结束之后需要通知另外两个线程,来告诉他我结束了,你上吧
有一个等待唤醒机制
无非就是谁等待谁被唤醒

package com.google.dome;public class Condom {public boolean isStatus = false;
}
package com.google.dome;public class Customer extends Thread {private Condom condom;public Customer(Condom condom) {this.condom = condom;}@Overridepublic void run() {while (true) {synchronized (condom) {// 是否拥有库存,如果没有就打电话给厂商,我们等if (condom.isStatus == false) {try {condom.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "我买完了快点生产");}condom.isStatus = false;System.out.println(Thread.currentThread().getName() + "我买完了,你快点生产,我通知你了");condom.notify();}}}
}
package com.google.dome;public class Producer extends Thread {private Condom condom;public Producer(Condom condom) {this.condom = condom;}@Overridepublic void run() {while (true) {// 对商家来说是是否有货,如果有货的话就等着synchronized (condom) {if (condom.isStatus == true) {try {condom.wait();} catch (InterruptedException e) {e.printStackTrace();}}condom.isStatus = true;System.out.println(Thread.currentThread().getName() + "我生产完了,你快点买,我通知你了");condom.notify();}}}
}

使用condom.wait进行线程等待并且condom.notify通知其他的线程
在这里插入图片描述
在这里插入图片描述
锁的对象为什么能使用.wait.notify呢?好奇怪
如果有多个线程的话,就可以唤醒所有的线程.notifyAll
frank竟然不打算往下讲, 这些就属于是并发编程的事了
说是什么点到为止
进程
java中提供了方法去操作进程,了解一下就行
这个已经涉及到很底层的东西,frank说不能再讲了,因为就越来越复杂了,现在的知识点还是有限的
这样做就需要用到泛型编程,这个泛型编程到底是个啥东西
大公司的并发操作有时候使用的是go
对于新手而言已经是超乎极限了
有一本书叫做java并发编程的艺术
java核心技术
你要是会这个肯定是优势,但是实习生不怎么要求这个
但是牛逼的实习生肯定得会
得写框架,写好算法就是基础任务
想进大厂就得多会一点
现在不要把这个放在重点上面,否则的话肯定会浪费很多时间
不要把时间浪费在无关的事情上面






micro_frank

http://www.lryc.cn/news/2384493.html

相关文章:

  • 从 Docker 到 runC
  • PET,Prompt Tuning,P Tuning,Lora,Qlora 大模型微调的简介
  • 02-jenkins学习之旅-基础配置
  • 互联网大厂Java求职面试:云原生架构与AI应用集成解决方案
  • Python爬虫实战:研究Crawley 框架相关技术
  • C#实现List导出CSV:深入解析完整方案
  • Appium+python自动化(三)- SDK Manager
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • 主成分分析基本概念及python代码使用
  • MCP如何助力智能交通系统?从数据融合到精准决策
  • 什么是抽象类?是所有函数都是纯虚函数吗?
  • 计算机视觉与深度学习 | Python实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据
  • 【Unity实战笔记】第二十四 · 使用 SMB+Animator 实现基础战斗系统
  • C/C++的OpenCV 进行图像梯度提取
  • Redis 缓存使用的BigKey问题
  • 【Java高阶面经:消息队列篇】22、消息队列核心应用:高并发场景下的解耦、异步与削峰
  • 软媒魔方——一款集合多种系统辅助组件的软件
  • Unity场景的加载与卸载
  • 多路径可靠传输协议(比如 MPTCP)为什么低效
  • 塔能高温冰蓄冷技术:工厂能耗精准节能的创新之路
  • 内存优化笔记1
  • 人脸识别,使用 deepface + api + flask, 改写 + 调试
  • 代码管理平台Gitlab如何通过快解析实现远程访问?
  • 基于SpringBoot+Vue的足球青训俱乐部管理后台系统的设计与开发
  • Redis 是否适合像 MySQL 一样当数据库使用?
  • AI是否会取代人类?浔川问答①
  • JDBC-java操作数据库
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取目录大小?
  • 线程调度与单例模式:wait、notify与懒汉模式解析
  • MySQL中TCP和套接字SSL加密连接行为分析