文章目录
0 前言
JSON是一种轻量级的数据交换格式,它以键值对的形式表示数据,易于阅读和编写,也易于机器解析和生成。JSON在Java中可以用于数据传输、配置文件、序列化和反序列化等。
多线程是指程序中同时运行多个任务的能力,它可以提高程序的性能和响应速度,也可以实现并发和并行的编程模式。Java中提供了多种方式来创建和管理线程,例如Thread类、Runnable接口、Executor框架等。
网络编程是指利用网络协议和接口来实现不同计算机之间的数据通信和资源共享的编程技术。Java中提供了丰富的网络编程类库,例如Socket、URL、HttpURLConnection等,可以实现TCP/IP、UDP、HTTP等协议的网络通信。
本文将介绍Java高级特性中JSON、多线程、网络编程的基本概念、使用方法和示例代码,希望能够对读者有所帮助。
1 JSON
1.1 定义
1)轻量级文本数据交换格式
2)具有自我描述性【看到某个JSON数据就能知道他的特点】
3)比XML传输速度快【跨平台】
1.2 语法规则
//构成要素:对象{}、数组[]、属性名:属性值、逗号
//属性值类型:字符串、数字、布尔值、null、数组、对象
{
"name":"jason",
"age":18,
"skills":["java","Hadoop","Python"]
}
1.3 JSON的使用
//在Person类中定义三个属性,字符串love,数组eat,数组house
public static void main(String[] args) {
//新建两个数组和一个字符串
String[] s1 = {"早饭","中饭","晚饭"};
String[] s2 = {"小房子","大房子"};
String s = "吃饭";
//创建Person对象并利用构造方法赋值
Person person = new Person(s, Arrays.asList(s1),Arrays.asList(s2));
//JSON的toJSON()方法转化为json格式再输出
Object o = JSON.toJSON(person);
System.out.println("o = " + o);
//新建一个JSON格式的字符串
String ss = "{\"love\":\"吃饭\",\"eat\":[\"早饭\",\"中饭\",\"晚饭\"],\"house\":[\"小房子\",\"大房子\"]}";
//JSON的parseObject()方法转化为对象再输出
Person person1 = JSON.parseObject(ss, Person.class);
System.out.println(person1.toString());
}
2 多线程
2.1 进程和线程
进程:应用程序的执行实例,一个应用对应一个进程
线程:CPU调度和分派的基本单位,进程中执行运算的最小单位
2.2 继承Thread类
//定义MyThread类继承Thread
public class MyThread extends Thread{
//重写run()方法
@Override
public void run() {
for (int i = 1;i < 100;i++){ System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
//创建线程,调用start方法
MyThread myThread = new MyThread();
myThread.start();
//多线程
MyThread myThread1 = new MyThread();
myThread1.start();
}
}
2.3 实现Runnable接口
//定义MyRunnable实现接口
public class MyRunnable implements Runnable{
//重写run()方法
@Override
public void run() {
for (int i = 1;i < 100;i++){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
//创建线程方法,调用start方法
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
//多线程
Thread thread1 = new Thread(myRunnable);
thread1.start();
}
}
2.4 线程的状态
正常情况下:
创建状态->就绪状态->运行状态->死亡状态
异常情况下:
创建状态->就绪状态->运行状态->阻塞状态->就绪状态->运行状态->死亡状态
sleep()
可以使线程阻塞,参数为毫秒
2.5 线程优先级
线程优先级有1-10级,1最低,默认优先级为5,使用setPriority()
方法设置优先级,优先级高的线程获得CPU资源的概率较大。
2.6 使用多线程实现抢票
public class Site implements Runnable{
private int count = 100;
private int num;
@Override
public void run() {
while (true){
//同步锁机制
synchronized (Site.class) {
if (count <= 0) {
break;
}
num++;
count--;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "抢购第" + num + "余票,还剩" + count + "张");
}
}
}
public static void main(String[] args) {
Site site = new Site();
//创建线程并起名
Thread thread1 = new Thread(site,"A");
Thread thread2 = new Thread(site,"B");
Thread thread3 = new Thread(site,"C");
System.out.println("***************");
thread1.start();
thread2.start();
thread3.start();
}
}
3 网络编程
3.1 网络概述
多台相互连接的计算机,可以实现资源共享。
3.2 网络类型分类
3.3 网络体系结构
3.4 网络通信协议概述
在网络中,多台计算机如果希望进行通信/数据传输,必须遵循某种规约,不过不遵循,则无法进行资源共享或是数据的传递
3.5 网络通信协议种类
UDP 特点:无连接,数据不可靠/不安全
TCP 特点:面向连接,数据稳定/安全
3.6 Socket简介
套接字【通信链路的节点】,在java中为提供给应用程序的接口,位于java.net
3.7 网络编程三要素
IP地址:设备在网络中的唯一标识
端口号:应用程序在设备中的唯一标识
协议:信息在网络传递的过程中必须遵循的规约,例如UDP TCP
3.8 基于UDP协议的Socket编程
//发送数据
public class SendMSG {
public static void main(String[] args) throws IOException {
//1.实例化DatagramSocket对象
DatagramSocket datagramSocket = new DatagramSocket();
//2.封装数据【以字节数组的形式传递】
String str = "Hello World";
//将字符串转换为字节数组
byte[] bytes = str.getBytes();
//127.0.0.1代表发送的目标地址【本机地址】
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
//10086为端口号
int port = 10086;
//将数组中所有要操作的数据bytes数组,以及ip地址address,端口号port打包封装到DatagramPacket构造器中
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, port);
//3.发送数据
datagramSocket.send(datagramPacket);
//4.释放资源
datagramSocket.close();
}
}
//接收数据
public class ReceiveMSG {
public static void main(String[] args) throws IOException {
//1.实例化DatagramSocket对象,端口号10086
DatagramSocket datagramSocket = new DatagramSocket(10086);
//2.封装数据
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
datagramSocket.receive(datagramPacket);
byte[] data = datagramPacket.getData();
int length = datagramPacket.getLength();
//3.输出获取的数据
System.out.println("接收到数据" + new String(data,0,length));
//4.释放资源
datagramSocket.close();
}
}
3.9 基于TCP协议的Socket编程
//发送数据
public class Client {
public static void main(String[] args) throws IOException {
//1.实例化Socket对象
Socket socket = new Socket("127.0.0.1", 10001);
//2
OutputStream outputStream = socket.getOutputStream();
outputStream.write("啊啊".getBytes(StandardCharsets.UTF_8));
//3
outputStream.close();
socket.close();
}
}
//接受数据
public class Server {
public static void main(String[] args) throws IOException {
//1.创建对象ServerSocket
ServerSocket serverSocket = new ServerSocket(10001);
//2.获取客户端的链接
Socket socket = serverSocket.accept();
//3.以流的形式读取数据
InputStream inputStream = socket.getInputStream();
//实现接收中文
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
int b = 0;
while ((b = inputStreamReader.read()) != -1){
System.out.print((char)b);
}
//4.释放资源
inputStream.close();
serverSocket.close();
socket.close();
}
}