1.synchronized 同步鎖
同步方法:
成員|靜態
簡單,但是鎖的范圍一般可能較大,效率低
同步塊
類的class:相當于鎖了類的整個信息|所有對象
this:鎖當前對象,鎖了這個對象的所有資源
資源:一般鎖不變的內容--對象地址
鎖的范圍太大效率低,鎖的范圍太小可能鎖不住
鎖一定要鎖不變的內容
死鎖:
需要避免鎖使用的過于頻繁,遇到對象無法釋放的情況,否則出現死鎖的問題
2.線程通信(生產者消費者模式)
wait():線程處于等待狀態
釋放對象的鎖,cpu的資源
notify():喚醒對方正在處于等待池中的線程
沒有對象的資源,就算是被喚醒也無法執行,必須要獲取到對象的鎖才能有資格執行
notifyAll()
喚醒全部
注意:使用在一個同步的環境下
3.IP:定義網絡上的節點(電腦,手機,pad,路由器...)..區分節點
分類:
IPV4 : 32位
IPV6 : 128位
特點的IP:
局域網內部IP:192.168.0.0~192.168.255.255
127.0.0.1 : 默認本地IP
localhost : 本地域名
DNS服務器:解析IP和域名之間的關系
InetAddress 此類表示互聯網協議 (IP) 地址。
static InetAddress getLocalHost() 返回本地主機。
static InetAddress getByName(String host) 在給定主機名的情況下確定主機的 IP 地址。
String getHostName() 獲取此 IP 地址的主機名。
String getHostAddress() 返回 IP 地址字符串(以文本表現形式)。
端口: InetSocketAddress
4. 端口port:區分軟件...
2個字節: 0~65535
注意:
1.同一的協議下端口號不能沖突
2.自定義設置端口號建議設置越大越好,一般8000網上
預留端口號:
80: http
8080:tomcat
1521:Oracle
3306:Mysql
InetSocketAddress 此類實現 IP 套接字地址(IP 地址 + 端口號)。
InetSocketAddress(String hostname, int port) 根據IP|域名+端口號構建
InetAddress getAddress() 獲取 InetAddress。
String getHostName() 獲取 hostname。
int getPort() 獲取端口號。
5.URL:統一資源定位符
互聯網三大基石: http html url
url的構成:
協議
域名
端口
資源
數據
"http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a"
URL(String spec) 構建url
6-1.Socket套接字: 傳輸層為應用層開辟的小口子,通過 Socket進行發送和接收數據
不同協議下的socket實現不同
面向Socket編程
tcp: 面向連接 打電話 安全 開銷大 基于3次握手 大小沒有限制 . 基于流傳輸
udp: 非面向連接 寫信|發短信 只管寫只管發 開銷小,效率高 不安全 大小有限制 一般不超過60k , 基于字節數組傳輸
基于udp的socket編程:
發送端
接收端
DatagramSocket 此類表示用來發送和接收數據報包的套接字。(定義發送端|接收端)
DatagramPacket數據報包(數據打包)
udp實現發送端的基本流程: 發送端和服務端是平等的
1.定義發送端 DatagramSocket(端口號) 指定發送端的端口號
2.準備數據
3.對數據打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
構造數據報包,用來將長度為 length 偏移量為 offset 的包發送到指定主機上的指定端口號。
4.發送void send(DatagramPacket p)
5.關閉 void close() 關閉此數據報套接字。
6-2.接收端基本流程:
1.定義接收端 DatagramSocket(int port)
2.準備字節數組
3.準備包裹用來接收數據 DatagramPacket(byte[] buf, int length)
4.接收
5.從包裹中獲取數據
byte[] getData()
返回數據緩沖區。
int getLength()
返回將要發送或接收到的數據的長度。
6.關閉
7-1.Socket 此類實現客戶端套接字
客戶端
1.定義客戶端 Socket(String host, int port) 創建一個流套接字并將其連接到指定主機上的指定端口號。
2.IO操作
輸出流OutputStream getOutputStream() 返回此套接字的輸出流。
3.刷出
4.關閉
7-2.ServerSocket 此類實現服務器套接字。
TCP服務端
1.定義服務端 ServerSocket(int port) 創建綁定到特定端口的服務器套接字。
2.阻塞式監聽 一個客戶端連接成功,就是一個socket
3.io操作
4.關閉
8-1.TCP實現文件上傳客戶端 :
1.定義客戶端 Socket(String host, int port) 創建一個流套接字并將其連接到指定主機上的指定端口號。
2.IO操作 先從文件中讀入數據-->寫出數據
new FileInputStream("");
輸出流OutputStream getOutputStream() 返回此套接字的輸出流。
3.刷出
4.關閉
8-2.TCP實現文件上傳服務端:
1.定義服務端 ServerSocket(int port) 創建綁定到特定端口的服務器套接字。
2.阻塞式監聽 一個客戶端連接成功,就是一個socket
3.io操作 :從客戶端讀入數據 --->文件輸出流 寫出文件中
4.刷出
5.關閉