第十二章 进程
1、进程:一个程序的执行过程
2、线程:每一个进程至少包含一个线程
3、创建线程:
1 继承Thread类,需要重写Run方法,Run方法:当CPU开始执行这个线程时执行的方法,调用start方法使线程进入到准备状态
2 实现Runnable接口,需要重写start方法,执行时需要将实例化的对象放到Thread构造里然后执行Thread对象的start方法
3 实现callable接口,需要重写call()方法,相当于Run方法,不同点·:有返回值,能抛出异常,使用线程池执行
4、API:
1 睡眠:sleep(long):使当前线程睡眠指定毫秒
2 Thread(String):设置线程名
3 setPriority(1-10):设置线程优先级
4 join():让当前线程阻塞,等待调用的线程执行完成
5 setDaemon(boolen):当主线程结束,所有守护线程均结束
-
//1 synchronized (lock){ //代码锁,悲观锁 lock: Buy.class , this, } //2 Lock:需要使用ReentrantLock的子类,占用资源少 * 如果多线程代码对公共资源进行修改,线程不安全 Collections.synchronizedList():直接生成线程安全的集合
-
单例模式
1 将所有构造方法私有化
2 定义一个私有的当前类的静态对象
3 定义一个公共的静态方法,在方法里返回创建好的静态实例
6 wait():使锁对象进入等待状态,等待状态时当前线程会阻塞
7 notify():可以唤醒进入等待状态的对象
8 当两个线程同时持有一把锁的时候,可以相互唤醒
-
阻塞队列:
-
构造需要指定队列长度
put(Object):往队列里面存值,方法是阻塞的
take(Object):从队列里面取值,方法是阻塞的
5、线程池:无法启动Thread
1 execute:只能启动Runnable线程
2 shutdown():释放线程池,在线程池用完之后释放
3 ThreadPoolExecutor:
核心线程:常驻线程
最大线程:当任务队列满的时候如果再来任务,会启动临时线程,线程数量最大不能超过最大线程数
保持时间:临时线程的最大闲置时间
时间单位:TimeUnit.SECONDS的静态常量
任务队列:当任务队列满的时候,启动临时线程
CallerRunsPolicy():多出来的任务直接执行Run方法,这是run的任务是在主线程中执行
ThreadPoolExecutor threadPoolExecutor =
new ThreadPoolExecutor(
2,
5,
1,
TimeUnit.SECONDS,
arrayBlockingQueue = new ArrayBlockingQueue<>(5),
//new ThreadPoolExecutor.AbortPolicy() 多出来的任务直接放弃,会抛出异常
//new ThreadPoolExecutor.DiscardPolicy() 多出来的任务直接放弃,不会抛出异常
//new ThreadPoolExecutor.CallerRunsPolicy());
//调用任务的run()方法绕过线程池直接执行。
//注:明确线程池对多可执行的任务数 = 队列容量+最大线程数
new ThreadPoolExecutor.DiscardOldestPolicy();
//多出来的任务会进入队列,同时放弃等待时间最长的任务
6、可见性:全局属性在不同线程中默认是不可见的(如果这个变量没有运算操作,变量的变更在当前线程是不可见的)
1 volatile:被volatile修饰的变量是可见的
2 原子性:一个过程要么执行完,要么不执行
3 java中具备原子性的操作:赋值
4 解决原子性问题:
1 加锁:synchronized (MoneyThreadf.class)(悲观锁)
2 CAS算法:比较再替换
第十三章:网络编程
1、ip:
ip4地址:255.255.255.255----0.0.0.0
1 回环地址:1. 127.0.0.1 通过这个ip访问本机会走防火墙
2. 代表本机:localhast 不会走防火墙
2 局域网ip:192.168.0.0----192.168.255.255
2、端口:0----65535,0----1023:系统占用,1024----65535:普通用户,一个端口号只能被一个程序监听
2、协议:UDP分发协议,一般用于直播,视频会议等
TCP:连接分为三次握手,断开分为四次挥手
-
datagramPacket.getAddress().getHostAddress() //获取发送端ip
3、NIO:通过channel: 传输数据
ServerSocketChannel: configBlocking:设置阻塞模式,true阻塞,false非阻塞
4、HTTP协议:
1 链接组成
协议://域名:端口/资源路径?参数key=参数value&参数2key=参数2value&…
5、enum:枚举类
1 无法继承
2 可以实现接口
3 构造方法必须私有
4 主要用于定义数量有限的常量,方便多个类使用
6、核心加载器,扩展加载器,系统加载器
Class:
1 getFields:获取非私有化属性数组
2 getDeclaredFields:获取所有属性数组
3 getMethods:获取非私有化方法和父类的方法
4 getDeclaredMethods:获取私有化方法
5 getConstructors:获得构造方法
6 getDeclaredConstructors:获得私有化构造方法
7 getAnnotations:获取注解列表(方法上的注解使用方法类调用,类上的注解使用类对象调用,属性使用属性对象调用)
8 setAccessible(true):暴力反射
7、XML:
数据格式:
1 xml:主要用于本地数据格式(存储一些配置信息)
2 json:主要用于网络传输格式
3 XML:一定有根标签,每个标签必须有终结标签,标签嵌套时不可以错开,标签内部属性以空格做为分隔符
4 <?version encoding ?> 必须在第一行
5 <! > DTD约束
//示例:
<ROOT>
<A>
<AA attr=1 attr2=2>
<sizeMax>20G</sizeMax>
<threadMax>1000</threadMax>
</AA>
</A>
<B>
</B>
</ROOT>