A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1015747546 初级黑马   /  2018-4-23 15:18  /  594 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-24 17:19 编辑

                                                        学习笔记

多线程
【让程序在同一时间执行多个程序】
进程:当前正在运行的程序 , 一个应用程序在内存中的执行区域;;--关闭进程后 该进程所在内存区域被释放
线程 : 【线程依赖进程;】---【 程序通过进程中的线程来运行,】
进程中的一个执行控制单元 执行路径
【一个进程可以有一个线程 也可以有多个】
单线程:安全性高 效率低
多线程:安全性低 【会产生线程安全问题】 效率高
多线程案例:360 迅雷 搜狐 雅 Google ;
多线程的实现方式1
继承 Thread类】-- 实现 Runnable 接口】
Thread :
[ jvm 允许应用程序并发运行多个执行线程]
【CPU执行程序的随机性】-----CPU高速切换每次执行一个 {多线程提高被CPU执行几率}】】】
两种创建新执行线程方法:
1 将类声明为 Thread 的子类;,该子类重写Thread的 run 方法;
方法:
void run----- 用于让子类重写 表示该线程要执行的任务 ; 不能直接调用
void start----------启动线程 开始执行 run 中 方法
String getName------获取线程名字
String setName()------修改
修改线程名字 ------- String setName();
启动线程------ start();
【抛出异常---throw new RuntimeException;】
静态方法:
主方法是单线程;
方法中代码的执行顺序是---由上至下---- 由左至右
主方法由【 J V M】调用
1 主方法代码单线程调用时 做一个 方法依次执行
2 主方法代码多线程时 多个执行
多线程的实现方式2
实现 Runnable 接口;
Thread【Runnable target】
static Thread currentThread():----返回当前线程对象;
【链式编程】
通过 Thread 调用 currentThread 从而实现调用setName 等方法;
Runnable 的所有成员都是共享的;可以通过Runnable 一个接口实现多个继承 并且可以继承Thread类 及其方法;
static void sleep -----------让当前线程睡一会;
sysnchronized : 可以修饰代码块和方法 被修饰的代码块和方法一旦被某个线程访问 则直接锁住 其他线程将无法访问;
同步代码块:
synchronized(锁对象){
}
注意:锁对象 需要被所有的线程共享;
区别:
同步 安全性高 效率低 ;
非同步 安全性低 效率高;
【同步代码块】:
同步 : synchronized();
同步方法】:
synchronized();
使用 该关键字修饰的方法 一旦被一个线程访问 将锁死;
静态同步方法:
当前类的字节码对象();
非静态同步方法:
同步对象是 this .
【拓展】
并发:
同步 : synchronized();
【单线程】
异步 : async
【多线程】
同一个线程是同步
不同线程是异步执行
【线程的随机性】
阻塞 : 上一行代码正在执行 还没有执行完毕 程序就阻塞在这里了 下一行代码 必须要等上一行代码执行完毕后 才会执行;
买票问题:
1 Thread类:
静态方法:static void sleep(long millis) :让所在线程睡眠指定的毫秒值;
2 实现Runnable接口:
定义非静态变量:int ticket = 100;
将 this.class 放在共享锁里;
**
1 保证类对象唯一**
2 使用 class 对象 ---------------------------------------------------------------------------网络编程
Socket(套接字):
用于描述IP地址和端口 是一个通信连的句柄 不同端口对应不同的服务;
Socket 就是为网络编程提供的一种机制:通信的两端都有Socket:
网络通信其实就是Scoket间 的通信 :
数据在两个Scoket间通过IO传输。。。
网络通信三要素:
IP地址【InetAddress】【分为:网络地址和主机地址】:
网络中设备标识
端口号:
物理端口 网卡口;
用于标记进程的逻辑地址 不同进程的标示
传输协议:
-----通讯规则
----TCP--- 建立连接 形成数据传输通道 在连接中 进行大数据量传输 通过【三次握手】完成连接 是可靠协议 必须建立连接 效率会稍低;
【重发机制 保证数据传输准确性】
【该方式适合准确性要求强的场合 不能忍受错误】
----UDP---将数据封装成数据包 不用建立连接 数据包大小限制在64K 因为没连接 所以是不可靠协议 无需建立连接 速度快
【适合实时性要求较强的场合 该协议延迟小】
---------========================================
InetAddress :----表示互联网协议 (IP地址);
static getByName( );
String getHostAddress();
String getH
=========================================
UDB 发送数据 :
创建发Socket对象端:
DategramSocket
创建数据并打包
DatagramPacket ---此类表示数据报包;
DategramPacket{数据 数据长度 IP 端口号;}
数据byte[ ] --设备地址IP---进程地址 端口号;
发送数据
send();
释放数据
close();
UDB 接受数据:
【接受需要包去调用】
创建接受对象;
DatagramScoked
接受数据
解析数据
输出数据
【【传输协议>>>IP >>>>端口号>>> 目的应用程序;】】
静态方法 通过类名去调用
====================================
UDP:
注意问题:
端口号错误 不会报错 会正常发送;
端口号不能重复使用;
============================
TCP协议发送数据:
分为 客户端 和 接收端
java. net.ServerScoket----TCP服务端;
构造方法:
ServerScoket(int port);
成员方法:
java.net Socket 类: 基于 TCP协议的Scoked 作为客户端;
构造方法:
Scoket( ); 基于TCP协议的Scoket 作为客户端;
getOutputStream ----
getInputStream -------
创建发送端Scoket对象
Scoket
获取输出端
OutputStream
键盘录入 用Systfem.in---然后转换成BufferedReade
一次读取一行
输出用 PrintWriter 包装字节流;
服务端读取 用BuffBufferedReade 转换成 socket.getInput
数据返回 客户端 用PrintWrite包装
【PrintWriter】----
//键盘录入
【】BufferedReader br = new BufferedReade (new Inputstream(System.in)) 【】
【】
获取输出流
Buffer
PrintWriter out = new P(s.getout,true)
【】
【】
创建服务端
SeverSocked
j监听
Socked
获取输入
BufferedReader = new BufferedReader(new Input(s.getInpu))
t
获取用户名
String
String
判断是否正确
boolean
输出结果
PrintWriter
返回判断
if(){}
【】
【利用TCP协议完成模拟用户登录案例
·
TCP客户端: 用户键盘输入用户名和密码, 发送到服务端进行登录, 接收服务端的结果打印
·
·
键盘录入用户名密码: 不用Scanner, 用System.in流, 通过转换流转换为BufferedReader, readLine()一次读一行. 一行用户名, 一行密码
·
·
将用户名密码发送到服务端: 不用socket.getOutputStream()写byte[], 用PrintWriter包装字节流, 按行输出用户名和密码的字符串
·
·
然后读取服务端登录结果: 用BufferedReader通过转换流转换socket.getInputStream()的字节流, 使用readLine()按行读取
·
·
TCP服务端: 读取客户端发来的用户名密码进行比对, 返回结果
·
·
服务端定义了一对正确的用户名和密码
·
·
接收客户端发来的用户名和密码: 也使用BufferedReader通过转换流转换socket.getInputStream(), 按行读取, 读2行, 第一行是用户名, 第二行是密码
·
·
比较用户名和密码是否一样
·
·
返回登录结果: 用PrintWriter包装socket.getOutputStream(), 按行写出登录结果。
·
=================================================================================================
反射机制
【在不修改源代码的前提下 利用 . class文件 通过对类的引用 进行动态修改 改变程序运行方式】
1 概述:
在运行状态中 对任意一个类都能知道 该类的属性和方法;能调用任意一个对象的方法;该动态获取的类以及动态调对象的方法 ------就是 java 语言的反射机制;
通过反射可以得到 该 . class 字节码文件中的所有东西---成员变量 方法 构造方法 私有;
2 字节码文件获取的三种方式
1》 对象名:---来自Object --对象已存在
2》 类名 .class:---- 是静态属性 知道类名就可获取
3》 Class.forName("路径");-----通过class类中静态方法 指定字符串 【是类的全名】;
【字节码对象用来描述字 .class节码文件的
java 中 描述事物都是通过类的形式 字节码也可看做一种食物 】
1 前提 获取字节码对象
构造方法===创建类对象
3 构造方法
Constructor <T> [ ] getConstructor();--无参
Constructor <T> getConstructor(Class <?>...parameterTypes);----有参
4 成员变量
获取类的字节码对象----Class.forName( );
获取学生类的对象-----newInstance( );
【Accessble】------·忽略权限修饰符-
【Declared】-------搜索到所有成员变量(但是不能修改);-=======================================================================================================================
HTML
HTML
作用:
用来制作页面(静态页面);
使用:
创建文件---文件扩展名为 .html 或者 .htm将结尾;
结构标签:
跟标签----<html> </html>;
<head>------html的 头标签
<body>-------html的体标签
字体标签:
<font>标签 :HTML中的字体标签
使用 :<font>文字</font>
<font>标签的属性:
<标签 属性名 = “属性值“ 属性名 = ”属性值“></标签>
字体加粗---b
字体斜体---i
字体下划线---u
居中标签 ----center
<center>内容<center>
src -----图片来源
width-----图片宽度
height------图片高度
alt------图片找不到现实的内容
<br/> 换行
引入路径问题:
1 : 图片和文件在同一路径
==直接写文件名 或 ./文件名
====如果引入的图片在文件的上一级
<img src =" . . / 文件名"/>
========引入图片在下一级
无序列表的属性:
<a href></a>
type属性:
disc-------实心点
circle-----空心圆
square-----方块
有序列表的属性:
type属性:1----数字字符
a-----英文字符
i------罗马字符
*start 属性----从哪开始
超链接的target属性:
_self
_blank
_parent
<img> 图片当前所在位置</img>
【表格标签--】-----
属性:
Width :表格宽度------最好指定宽度 防止将其他空格挤掉。
Height :表格高度
Border : 边框
Align : 表格水平位置----center 居中
*left
*center-----内容居中
*right
hr/---横的空格线
HTML的作用 用来制作浏览器页面;;;---制作静态页面
作用 ; 使用范围: --再设计网站页面的时候 都要用到--
============================
【总结】---=-=-=-=---=-==-=
HTML的标准:
< pre>标签-----原生标签====将复制文件保持原有格式
<hr/>---空白横线
-----多个空格;
======================================
图片显示:
图片标签: <img>
属性:
src---来源
width---图宽(px)0
height---图高
alt-----图片找不到内容---为图片注释说明
相对路径:
【. .】----返回上一级
================================
友情链接:
有序列表
<ol>
<li> </li>
</ol>
无序列表
<ul>
<li> </li>
</ul>
超链接标签 ===<a>
属性:
href----连接路径
target ----打开方式
_self---在自身打开
_blank ----新打开一个窗口
总结:--
type属性:
disc--实心点
circle -- 实心圆
square -- 方块
有序:
type---
-start--从哪开始
1---数字
a---字母
i--罗马
表格:
<table>---画表格
属性:
Width----表格宽度
Height----高度
Border====边框
Align --- 居中
<tr>
<td>讲话稿</td>
</tr>
嵌套-----
<tr colspan>----跨列合并 column----列
<tr rolspan>----跨行合并 row----行
【确定 是跨行还是跨列 确定好后 在确定跨行后占地多少 然后删除被合并 】
======================================
【【网站首页:】】
HTML 表单标签:
<form>----</form>
表单元素:
<input type = "text">---文本框
<input type = password----密码框
<input type = radio ---单选
<input type = checkbox----复选按钮
<input type ==button---- 没有任何功能的按钮
<input type = submit ------ 提交按钮
<input type = reset------重置按钮
<input type = file-----文件上传的表单项;
<input type = hidden ---- 隐藏字段;---可提交到后台;
<input type = 【image---将图片作为按钮】
selsct ----下拉列表
textarea-----文本区
背景图片---background---
align=center====表格居中
-------------text------------------------------
获取文本框数据==为文本框 必须有name 属性 ;根据
【必须属性---name type】
name 接受属性
value----文本框默认值---可以修改;
单选按钮 --checked----默认被选中
size------控制文本框长度
disabled---修饰name name 不可改变
maxlength----限制接受数据长度最大值
readonly-----文本框只读
【checkbox】??=====【默认选中 checked】=====单选多选
selected------单选----省份 之类
【】form 常用属性action---提交路径method ----- 请求的方式 .GET和 . POST.默认是 GET;区别:1GET 和2POST
1数据显示到地址栏 提交有大小限制
2没有大小限制 数据不会显示到地址栏
密码---password
属性 同上
确认密码 不重名
=======================
总结:
<input type = email> :-----
date -----日期
number----
color----颜色
【JavaEE805】
【lppirbio】







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马