一、JSON
1.JSON定义
(1.)轻量级的文本数据交换格式
(2.)具有自我描述性【看到某个JSON数据就能知道它的特点】
(3.)比XML传输速度快【跨平台】
2.JSON的语法规则
(1.)语法
{
"name" : " jason" ,
"age" :20,
"skills":["Java","Hadoop","Python"]
}
(2.)构成要素:1.对象{} 2.数组[] 3.属性名:属性值 4.逗号(多个数据之间由逗号分隔)。
(3.)属性值类型种类:字符串、数字、布尔值、null、数组、对象
3.JSON实战
步骤1:JSON解析框架 fastjson-1.2.47.jar【使用maven的pom依赖管理】
步骤2:创建maven工程,并创建标准目录
步骤3:实现java对象转成JSON对象
步骤4:创建java对象
1.java对象转成JSON对象
student类:
public class student {
private String name;
private int age;
private List<String> love;
public student() {
}
public student(String name, int age, List<String> love) {
this.name = name;
this.age = age;
this.love = love;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getLove() {
return love;
}
public void setLove(List<String> love) {
this.love = love;
}
}
Text类:
public static void main(String[] args) {
String []array=new String[]{"睡觉","跑","球"};
List<String> list= Arrays.asList(array);
student stu = new student("张三",18,list);
String s= JSON.toJSON(stu).toString();
System.out.println(s);
}
2JSON对象转成java对象
1.Student类(同上)
2.Text类:
public static void main(String[] args) {
String ss="{\"love\":[\"睡觉\",\"跑\",\"球\"],\"name\":\"张三\",\"age\":18}";
student stu =JSON.parseObject(ss,student.class);
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getLove());
}
二、多线程:
- 进程和线程定义:
进程:应用程序的执行实例【一个应用对应一个进程】
线程:cpu调用和分派基本单元,进程当中执行的最小单位
2.创建线程的种类
(1.)继承java.lang.Thread类
(2.)实现java.lang.Runnable接口
3.继承java.lang.Thread类 单线程:
public class MyDemo01 extends Thread {
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
MyDemo01 myDemo01 = new MyDemo01();
myDemo01.start();
}
}
4.继承java.lang.Thread类 多线程:
public class MyDemo02 extends Thread {
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
MyDemo02 a1 = new MyDemo02();
a1.start();
// 调用方法 a1.run();
MyDemo02 a2 = new MyDemo02();
a2.start();
}
5.实现Runnable接口 创建单线程:
public class MyDemo03 implements Runnable {
//步骤2:实现run()方法
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
MyDemo03 myDemo03 = new MyDemo03();
Thread thread = new Thread(myDemo03);
thread.start();
}
}
6.实现Runnable接口创建多线程:
public class MyDemo04 implements Runnable {
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
public static void main(String[] args) {
MyDemo04 myDemo04 = new MyDemo04();
Thread thread1= new Thread(myDemo04);
Thread thread2 = new Thread(myDemo04);
thread1.start();
thread2.start();
}
}
7.线程的状态:
(1.)正常情况下流程:创建状态—>就绪状态—>运行状态—>死亡状态
(2.)异常情况下流程:创建状态—>就绪状态—>运行状态—>阻塞(休眠)状态—>就绪状态—>运行状态—>死亡状态
8.线程优先级:
(1.)线程优先级由1~10表示,1最低,默认优先级为5
(2.)优先级高的线程CPU资源的概率较大
(3.)线程休眠:核心要点:sleep()可以使线程阻塞【休眠】
8.线程实战:
(1.)Site类:
public class Site implements Runnable {
//1.记录剩余票数
private int count=100;
//2.记录买到第几张票
private int num=0;
@Override
public void run() {
//3.死循环,反复去抢票
while (true) {
synchronized (Site.class) {
//4.如果票抢购完毕,则退出循环
if (count <= 0) {
break;
}
num++;//每抢一次加1
count--;//总票数每次减1
//休眠 模拟网络延时,看到抢购的过程
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(
Thread.currentThread().getName() + "抢购第" + num + "张票,剩余" + count + "张票"
);
}
}
}
}
(2.)Text类:
public static void main(String[] args) {
Site site = new Site();
Thread thread1 = new Thread(site,"孙三");
Thread thread2 = new Thread(site,"钱二");
Thread thread3 = new Thread(site,"赵一");
System.out.println("****************************");
thread1.start();
thread2.start();
thread3.start();
}