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

news2024/11/27 14:47:56

一、多线程

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.coloradmin.cn/o/1587317.html

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

相关文章

微服务demo(四)nacosfeigngateway(2)gatewayspringsercurity

一、思路 1、整体思路 用户通过客户端访问项目时&#xff0c;前端项目会部署在nginx上&#xff0c;加载静态文件时直接从nginx上返回即可。当用户在客户端操作时&#xff0c;需要调用后端的一些服务接口。这些接口会通过Gateway网关&#xff0c;网关进行一定的处理&#xff0…

Spring Boot REST API - CRUD 操作

Spring Boot REST API - CRUD 操作 这里主要提一下 spring boot 创建 rest api&#xff0c;并对其进行 CRUD 操作 jackson & gson 目前浏览器和服务端主流的交互方式是使用 JSON(JavaScript Object Notation)&#xff0c;但是 JSON 没有办法直接和 Java 的 POJO 创建对应…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示汉字的功能

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示汉字的功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍LCD1602字符型液晶显示器介绍一、LCD1602字符型…

20240411,内存分区模型

一&#xff0c;内存分区模型 生成可执行文件EXE文件之前代码区【函数体的二进制代码——共享-对于被频繁执行的程序&#xff0c;只需要在内存中有一份代码&#xff1f;&#xff0c;只读】&#xff0c;全局区【全局变量&#xff0c;静态变量&#xff0c;常量&#xff0c;该区域…

012:vue结合纯CSS实现蛇形流程图/步骤条

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"container"><div v-for"(item, index) in list" class"grid-item"><div class"step">step{{index1}}</div></div&…

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

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

视频基础学习六——视频编码基础三(h264框架配合图文+具体抓包分析 万字)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式&#xff08;RGB与YUV&#xff09; 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一&#xff08;冗余信息&#xff09; 视频基础学习五——视频编码基础…

WinRAR再爆0 day漏洞,0 day漏洞该如何有效预防

WinRAR再爆0 day漏洞&#xff0c;已被利用超过4个月。 Winrar是一款免费的主流压缩文件解压软件&#xff0c;支持绝大部分压缩文件格式的解压&#xff0c;全球用户量超过5亿。Group-IB研究人员在分析DarkMe恶意软件时发现WinRAR在处理ZIP文件格式时的一个漏洞&#xff0c;漏洞…

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的笔记记录分享网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

牛客 NC36 在两个长度相等的排序数组中找到上中位数【中等 模拟 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f 思路 直接模拟2个数组有顺序放到一个数组中&#xff0c;然后返回中间的数参考答案java import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 pu…

使用htmlentities()和nl2br()将文本数据正确显示到前台

问题&#xff1a; 在后台textarea里编辑了有一串字符串&#xff0c;虽然在textarea里编辑是有换行效果的&#xff0c;但是数据获取到就只是\n&#xff0c;前端是不认识这个的&#xff0c;正确输出到前台的换行只能是<br/>。 $str "ABCDEFGHIJKLMNOPQ"; echo…

Multisim仿真二极管、晶体管和场效应管学习笔记

Multisim仿真二极管、晶体管和场效应管 &#xff08;note&#xff1a;使用Multisim14.0版本进行仿真&#xff09; 文章目录 Multisim仿真二极管、晶体管和场效应管二极管的I-V特性晶体管的I-V特性场效应管的I-V特性 二极管的I-V特性 插入I-V analyzer 原理图绘制 改变仿真…

【MCU开发规范】:MCU的性能测试

MCU的性能测试 前序性能评判方法MIPSCoreMark EEMBC其他参考 前序 我们平时做MCU开发时&#xff0c;前期硬件选型&#xff08;选那颗MCU&#xff09;基本由硬件工程师和架构决定&#xff0c;到软件开发时只是被动的开发一些具体功能&#xff0c;因此很少参与MCU的选型。 大部分…

面试经典算法系列之二叉树1 -- 从前序与中序遍历序列构造二叉树

面试经典算法16 - 从前序与中序遍历序列构造二叉树 LeetCode.105 公众号&#xff1a;阿Q技术站 问题描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根…

02 - Git 之命令 +

1 Git相关概念 1.1 以下所谈三个区&#xff0c;文件并不只是简单地在三个区转移&#xff0c;而是以复制副本的方式转移 使用 Git 管理的项目&#xff0c;拥有三个区域&#xff0c;分别是 Working area工作区&#xff08;亦称为 工作树Working Tree&#xff09;、stage area …

学习JavaEE的日子 Day33 File类,IO流

Day33 1.File类 File是文件和目录路径名的抽象表示 File类的对象可以表示文件&#xff1a;C:\Users\Desktop\hhy.txt File类的对象可以表示目录路径名&#xff1a;C:\Users\Desktop File只关注文件本身的信息&#xff08;文件名、是否可读、是否可写…&#xff09;&#xff0c…

简单了解JVM

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

无人新零售引领的创新浪潮

无人新零售引领的创新浪潮 在数字化时代加速演进的背景下&#xff0c;无人新零售作为商业领域的一股新兴力量&#xff0c;正以其独特的高效性和便捷性重塑着传统的购物模式&#xff0c;开辟了一条充满创新潜力的发展道路。 依托人脸识别、物联网等尖端技术&#xff0c;无人新…

中位数和众数-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第49讲。 中位数和众数&…

初识 QT

初始QT 什么是QTQT发展史QT支持的平台QT的优点QT的应用场景搭建QT开发环境QT的开发工具概述QT下载安装 使用QT创建项目QT 实现Hello World程序使用按钮控件来实现使用标签控件来实现 项目文件解析widget.hmain.cppwidget.cppwidget.ui.pro文件 对象树QT 窗口坐标体系 什么是QT …