Java基础07--多线程-网络编程-Java高级

一、多线程

1.认识多线程

①线程

②多线程

2.创建线程方式

①方式一:继承Thread类

1.让子类继承Thread线程类
2.重写run方法,就是这个线程执行会执行的操作。
3.创建继承Thread的子类对象就代表一个线程
4.启动线程:.start()-自动执行run方法

注意:main是一条默认的主线程,这个子类对象是子线程

对于第一条,相当于把子线程就当一个对象执行它的方法
对于第二条,如果放在前面,执行不到start方法就启动不了子线程

②方式二:实现Runnable接口

1.定义一个任务类,实现Runnable接口
2.重写Runnable的run方法
3.创建任务对象
4.把任务对象交给一个线程对象

其匿名内部类写法:

③方式二:利用Callable接口、FutureTask类

前面两个方式都不能返回值run方式是void

实现Callable,要执行的操作

Callable是泛型接口,要返回什么类型数据就在<>填

3.Thread线程类的常用方法

注意:currentThread方法是在哪个线程里执行就会拿到哪个线程对象
所以拿到名字可以判断是哪个线程在执行操作

设置名字:在使用构造器创建线程对象设置名字就需要在创建的那个线程类构造器使用Thread的构造器

sleep、join方法:

如果这样就会让t1,t2,t3线程顺序执行完毕

4.线程安全

模拟线程安全问题

第二个判断的时候,第一个取钱的操作还没执行,就还可以取钱,出现线程安全

5.线程同步

①认识线程同步:

②方式一:同步代码块

双引号代表的对象只有一份,就限制了所有线程访问此核心判断代码都只能一个接着一个进行,这样如果是另一个账户对象要取钱就不能操作了

普通成员方法建议使用this

静态方法,调用时使用类名,所以建议使用类名作为锁

③方式二:同步方法

就是在方法前加修饰词synchronized

性能比同步代码块差,因为,同步代码块可以先执行一些操作,但是现在可以忽略不记,同步方法可读性更好

④方式三:Lock锁

每个类对象都应该有个自己的锁对象,所以定义实例变量Lock。

final代表了lk不可二次赋值

加锁解锁放在try-finally中的finally区中,这样就保证了不会出现中间出现问题不会进行解锁的操作

6.线程通信-了解

7.线程池

①认识线程池

若线程池中的数量固定,线程占满,任务会排队,待线程执行完之前操作会继续执行后续任务

②创建线程池

参数很重要

临时线程数量等于最大线程数量减去核心线程数量,核心线程会一直存在,线程工厂负责去创建临时线程

最大存活时间后跟了TimeUnit.SECONDS代表是秒,任务队列可以是:new LinkedBlockingQueue<>,但更多采用基于数组的new ArrayBlockingQueue<>(),线程工厂这是个创建默认线程工厂的方式,任务拒绝策略是使用了ThreadPoolExecutor的内部类,当最大线程数量都在工作,任务队列也满了就会抛异常给任务队列。      

③线程池处理Runnable任务

临时线程会在核心线程都在工作,任务队列占满的情况下创建,超过临时创建的数量就会抛异常

任务拒绝策略

④线程池处理Collable任务

⑤Executors工具类实现线程池

核心线程数量配置选择:

注意:在大型并发系统环境中不使用工具类去创建线程池,因为任务队列是无限的,太多会瘫痪

8.并发和并行

①认识进程

CPU同一时间会执行多个线程,并行,CPU这多个线程不断切换,切换很快,导致看上去就是同时进行,并发

9.线程的生命周期

sleep方法不会释放锁,wait会把锁释放

10.悲观锁与乐观锁

悲观锁:一上来就加锁,没有安全感。每次只能一个线程进入访问完毕后,再解锁。
/乐观锁:一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。线程安全,性能较好。

CAS整数修改的乐观锁:

使用这种锁它会拿到共享资源对象的地址,然后通过地址得到此时需要修改的值的大小,拿期望修改的值在此处就是加一,与那个值进行比较如果不一样,就返回继续拿最新的值与修改的操作加一,直到此时要修改的值和期望值相同,再返回此时要修改的值是多少去加一。
就是判断此时要修改的值是否在我要修改的时被别人已经修改

11.线程应用

二、网络编程

CS\BS都依赖于网络编程

1.网络通信的三要素

IP地址就是设备在网络中的身份证,端口就是应用程序在设备中的身份证

①IP地址

IP域名,就是代表IP地址

IP常用命令在cmd输入

Java中代表IP地址的类:

这里的timeout代表这个时间内是否能联通

②端口号

③协议

我们要关注从应用层到传输层之间的协议

对于TCP协议:
三次握手建立可靠连接

服务器端收到客户端发出的连接请求,确保了客户端可以发消息;客户端收到服务器端返回的响应,确保了服务器端可以收到消息并且可以发消息;而服务器端再次收到客户端发出的确认信息,保证了客户端可以收到消息。
这样就确保了客户端和服务器端都可以收发消息,保证了可靠连接。

四次挥手确保断开连接

2.UDP通信

①入门

客户端的创建:

服务器端对象

服务端先启动,启动后会在receive方法这等待,如果有客户端发送消息才会继续往下
服务器端还可以拿到地址和端口

②多发多收

客户端如何修改

服务端如何改

3.TCP通信

①入门

服务端启动后在accept处等待,与客户端连接后,会在使用socket通信的字节输入流的时候停止等待。

②多发多收

③支持与多个客户端通信

服务器端读数据线程类:

主线程接受客户端:

④端口转发-群聊

服务器端主线程添加集合记录scoket

子线程发送给其他在线客户端方法:

子线程重写run方法,退出时应删除集合元素

客户端若想收消息,得有个子线程负责:

收消息线程类:

⑤BS架构

之前都是CS架构客户端-服务器端

BS架构,浏览器-服务器端

主线程接受浏览器连接:

子线程类:

浏览器是短连接响应后就需要关闭,由于得遵循HTTP协议格式

所以服务器端应该改造成:

太多人访问容易发生并发
使用线程池优化

其实可以不改这个类因为Thread类是实现Runnable的

三、Java高级

1.单元测试

Junit单元测试框架

业务方法:

Junit单元测试框架,断言机制通过

注解:

如果每个方法需要一个独立的通信管道就需要在Before和After中建立和释放资源

测试方法共用同一个通信管道,就在BeforeClass和AfterClass中建立和释放资源

2.反射

①认识反射

②获取类

③获取类的构造器


记记代码风格就行,后续有用

④获取类的成员变量

⑤获取了类的成员方法

⑥反射的作用、应用场景

反射做通用框架

3.注解

①认识注解

如果不止一个属性,但是其他都有默认值则也可以不写

②元注解

③注解的解析

④应用场景



5.动态代理

①创建代理

创建的接口表明了BigStar类要代理的方法,并且BigStar类应该实现这个接口。
代理:

②实际代理应用

统计耗时是相同代码且与业务无关
代理:

用户类

主程序调用:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机&#xff0c;它是一个虚构出来的计算机&#xff0c;一种规范。其实抛开这么专业的句子不说&#xff0c;就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

VMware导出虚拟机vmkd格式转换qcow2

VMware虚拟机导出qcow2格式可以上传至云服务 1、需要导出的虚拟机 2、克隆虚拟机 3、选择克隆源 4、创建完整克隆 5、完成 6、找到VMware安装路径 7、找到vmware-vdiskmanager所在路径使用cmd或Windows PowerShell进入目录 进入vmware-vdiskmanager目录 cd F:\软件\VMware Wo…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

React 快速入门:掌握前端开发的核心技能

React 快速入门&#xff1a;掌握前端开发的核心技能 一、React 简介1.1 React 的历史1.2 React 的概念1.3 React 的特点1.4 React 的官网地址 二、开发环境搭建三、React 基础3.1 JSX3.2 组件3.3 Props3.4 State3.5 props 和 state 的区别3.6 Hook 四、React 生命周期五、添加样…

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对…

Unity构建详解(7)——AssetBundle格式解析

【文件格式】 文件可以分为文本文件、图片文件、音频文件、视频文件等等&#xff0c;我们常见的这些文件都有行业内的标准格式&#xff0c;其意味着按照一定的规则和规范去保存读取文件&#xff0c;可以获取我们想要的数据。 有些软件会有自己的文件格式&#xff0c;会按照其…

风储微网虚拟惯性控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 风储微网虚拟惯性控制系统simulink建模与仿真。风储微网虚拟惯性控制系统是一种模仿传统同步发电机惯性特性的控制策略&#xff0c;它通过集成风力发电系统、储能系统和其他分…

如何动态渲染HTML内容?用v-html!

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

计算机网络知识等汇总补充

计算机网络知识汇总补充 一、四次挥手1、为什么TCP要等待2MSL2、如果说一个系统中&#xff0c;有大量的time_wait和close_wait&#xff0c;会是什么原因&#xff1f; 二、你是怎么解决粘包问题&#xff1f;三、你觉得哪些场景适合redis四、redis的持久化策略五、你会怎么保证my…

4-云原生监控体系-Grafana-基本使用

1. 介绍 使用Grafana&#xff0c;您可以通过漂亮、灵活的仪表板创建、探索和共享所有数据。查询、可视化、提醒和理解您的数据&#xff0c;无论数据存储在何处。 图片出处&#xff1a; https://grafana.com/grafana/ 官方网站 2. 界面介绍 Connections 可以配置数据源&#x…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了&#xff0c;直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit &#xff0c;然后又action 构建&#xff0c;再下载&#xff0c;这样的话也好&#…

Redis从入门到精通(十三)Redis分布式缓存(一)RDB和AOF持久化、Redis主从集群的搭建与原理分析

文章目录 第5章 Redis分布式缓存5.1 Redis持久化5.1.1 RDB持久化5.1.1.1 执行时机5.1.1.2 bgsave原理 5.1.2 AOF持久化5.1.2.1 AOF原理5.1.2.2 AOF配置5.1.2.3 AOF文件重写 5.1.3 RDB和AOF的对比 5.2 Redis主从5.2.1 搭建主从结构5.2.2 主从数据同步原理5.2.2.1 全量同步5.2.2.…

集群开发学习(一)(安装GO和MySQL,K8S基础概念)

完成gin小任务 参考文档&#xff1a; https://www.kancloud.cn/jiajunxi/ginweb100/1801414 https://github.com/hanjialeOK/going 最终代码地址&#xff1a;https://github.com/qinliangql/gin_mini_test.git 学习 1.安装go wget https://dl.google.com/go/go1.20.2.linu…

【Ubuntu】 Github Readme导入GIF

1.工具安装 我们使用 ffmpeg 软件来完成转换工作1.1 安装命令 sudo add-apt-repository ppa:jonathonf/ffmpeg-3sudo apt-get updatesudo apt-get install ffmpeg1.2 转换命令 &#xff08;1&#xff09;直接转换命令&#xff1a; ffmpeg -i out.mp4 out.gif(2) 带参数命令&…

【洛谷 P4017】最大食物链计数 题解(深度优先搜索+动态规划+邻接表+记忆化搜索+剪枝)

最大食物链计数 题目背景 你知道食物链吗&#xff1f;Delia 生物考试的时候&#xff0c;数食物链条数的题目全都错了&#xff0c;因为她总是重复数了几条或漏掉了几条。于是她来就来求助你&#xff0c;然而你也不会啊&#xff01;写一个程序来帮帮她吧。 题目描述 给你一个…

SuperGluePretrainedNetwork调用接口版本(两个版本!)

本脚本是一个基于Python的应用&#xff0c;旨在演示如何使用SuperGlue算法进行图像之间的特征匹配。SuperGlue是一个强大的特征匹配工具&#xff0c;能够在不同的图像之间找到对应的关键点。这个工具尤其适用于计算机视觉任务&#xff0c;如立体视觉、图像拼接、对象识别和追踪…

RN封装三角形组件(只支持上下箭头)

import React from react; import { View, StyleSheet } from react-native;const Triangle ({ direction, width, height, color }) > {// 根据方向选择三角形的样式const triangleStyle direction up? {borderTopWidth: 0,borderBottomWidth: height,borderLeftWidth: …

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云&#xff0c;安装docker暴露一下端口&#xff0c;就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…