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

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

相关文章:

  • 取消 Conda 默认进入 Base 环境
  • RxJS 核心操作符详细用法示例
  • 告别手动测试:AUTOSAR网络管理自动化测试实战
  • Python应用“面向对象”人力系统
  • NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系
  • 【萤火工场GD32VW553-IOT开发板】流水灯
  • 【数据架构06】可信数据空间架构篇
  • SpringBoot3+Vue3开发宾馆住房管理系统
  • YOLO-SLD:基于注意力机制改进的YOLO车牌检测算法
  • QML与C++联合编程
  • 手游DDoS攻击防御与应对策略
  • 根据参数量,如何推断需要多少数据才能够使模型得到充分训练?
  • Python asyncio库:基本概念与使用方法
  • 佰力博与您探讨PVDF薄膜极化特性及其影响因素
  • GMP模型入门
  • Rules and Monetization
  • 【JavaScript-Day 20】揭秘函数的“记忆”:深入浅出理解闭包(Closure)
  • 【MySQL】实战时遇到的几个 tips
  • ​宠智灵AI诊疗助手:打造宠物医疗的“第二医生”与智能化引擎
  • MySQL--day6--单行函数
  • 城乡建设局网站/长沙网站seo技术厂家
  • 竞价排名推广方案/网站seo服务公司
  • 指纹锁在什么网站做宣传好/网推接单平台有哪些
  • 做同城相亲网站/小程序模板
  • 企业网站建设与管理作业/灯塔seo
  • 淘客网站怎么与pid/邯郸网站优化公司