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类应该实现这个接口。
代理:

②实际代理应用

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

用户类

主程序调用:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

绝地求生:PUBG×杜卡迪联名上线!参与投稿评论赢取精美好礼

PUBG杜卡迪联名活动游戏内现已正式上线&#xff01;我们诚邀与您一起在开拓未知战场和书写新历史的过程中&#xff0c;与杜卡迪一同实现您的极速梦想&#xff01; 在本次的杜卡迪工坊中&#xff0c;更是包含了具备标志性红色在内的6种颜色供您自由选择&#xff0c;一起自由驰骋…

创作一首音乐需要多长时间?网易云音乐内测AI音乐生成工具『网易天音』

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

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

KKVIEW远程远程访问家里电脑

远程访问家里电脑&#xff1a;简易指南与价值所在 在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的工具。有时&#xff0c;我们可能在外出时急需访问家中电脑里的某个文件或应用&#xff0c;这时&#xff0c;远程访问家里电脑就显得尤为重要。本文将简要介…

SQLite---调试提示(十九)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite Android 绑定&#xff08;十八&#xff09; 下一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; ​ 以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。 这些技术旨在帮助理解 核…

从 SQLite 3.5.9 迁移到 3.6.0(二十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​SQLite 版本 3.6.0 &#xff08;2008-07-16&#xff09; 包含许多更改。按照惯例 SQLite项目&#xff…

中移物联网 OneOS 操作系统环境搭建和工程创建

一、官网 OneOS Lite是中国移动针对物联网领域推出的轻量级操作系统&#xff0c;具有可裁剪、跨平台、低功耗、高安全等特点&#xff0c;支持ARM Cortex-A和 Cortex-M、MIPS、RISC-V等主流芯片架构&#xff0c;兼容POSIX、CMSIS等标准接口&#xff0c;支持Javascript、MicroPyt…

Ubuntu下配置Android NDK环境

Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件&#xff08;即解压&#xff09; ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK&#xff0c;还需要进行环境变量…

C++ stl容器string的底层模拟实现

目录 前言&#xff1a; 1.成员变量 2.构造函数与拷贝构造函数 3.析构函数 4.赋值重载 5.[]重载 6.比较关系重载 7.reserve 8.resize 9.push_back,append和重载 10.insert 11.erase 12.find 14.迭代器 15.流插入&#xff0c;流提取重载 16.swap 17.c_str 18.完…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如&#xff0c;假设您想创建一个测试方法&#xff0c;该方法将多次访问网站上的某个页面&#xff0c;并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…

【C++题解】1605. 求一个两位数的个位和十位的和

问题&#xff1a;1605. 求一个两位数的个位和十位的和 类型&#xff1a;基本运算、拆位求解。 题目描述&#xff1a; 从键盘读入一个两位的整数 n &#xff0c;请求出这个两位整数个位和十位的和是多少&#xff1f; 输入&#xff1a; 一个两位的整数 n 。 输出&#xff1a…

hbase基础shell用法

HBase中用create命令创建表&#xff0c;具体如下&#xff1a; create student,Sname,Ssex,Sage,Sdept,course 此时&#xff0c;即创建了一个“student”表&#xff0c;属性有&#xff1a;Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键&#x…

【MySQL】事务篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 目录 本系列专栏 1. 什么是事务 2. 事务的特征 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 隔离性&…

255Mesh 无线lora模块详细配置和测试

一、型号介绍 字符含义&#xff1a; E&#xff1a;终端 N&#xff1a;节点&#xff08;node&#xff09; G&#xff1a;网关 &#xff08;gateway&#xff09; 官网淘宝介绍 注意&#xff1a;组网必须配网关。 二、功能配置 软件界面 1.网络参数 网络参数包括网络 ID&a…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面&#xff0c;记录结题过程 有序矩阵中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix &#xff0c;其…

FPGA基于VCU的H265视频压缩,HDMI2.0输入,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板视频输入Video PHY ControllerHDMI 1.4/2.0 Receiver SubsystemVideo Processing SubsystemVideo Frame Buffer WriteZynq UltraScale VCUPetaLinux 系统制作VLC播放器工…

ubuntu安装irtualbox注意事项

下载官网7.0版本&#xff0c;ubuntu22.04,安装一直出错误&#xff0c;查到了下面兄弟的办法&#xff0c;仍然不幸&#xff0c;最后使用apt重装&#xff0c;请按第二部分流程安装&#xff0c;安装6.1,可以用 第一部分&#xff0c;反正我是没搞通&#xff0c;7.0反复的出现相同的…

在 Leetcode 上使用 Javascript 查找数组中的所有重复项(使用 JS 的 DSA)

在本篇博客文章中&#xff0c;我们将探讨如何在数组中找出所有重复的元素&#xff0c;这个问题源自LeetCode上的一个问题。 问题描述&#xff1a; 我们有一个包含n个整数的数组&#xff0c;所有整数都在范围[1, n]内。每个整数要么出现一次&#xff0c;要么出现两次。任务是找…

第8章 项目整合管理

子过程&#xff1a;为创建预定的产品、服务或成果而执行的一系列相互关联的行动和活动&#xff1b; 既属于某一过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;又属于某一知识领域&#xff08;整合、范围、进度、成本、质量、资源、采购、沟通、干系人、风险&…

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型

5G智慧水利数字孪生可视化平台&#xff0c;推进水利行业数字化转型。随着5G技术的快速发展&#xff0c;越来越多的行业开始探索数字化转型的道路。水利行业作为国民经济的重要支柱&#xff0c;也面临着数字化转型的迫切需求。5G智慧水利数字孪生可视化平台作为水利行业数字化转…