多线程的知识点
Thread是实现了Runnable接口的类,使得run支持多线程
因类的单一继承原则,推荐多使用Runnable接口
如何给run方法传递参数
1.构造函数传2.成员变量传递setXX3.回调函数
如何实现处理线程返回值
1.主线程等待法(控制语句多,等待时间自己设置,不知道具体多久她已经完成,不能精准控制)
2.join阻塞当前主线程,等待子线程处理完毕
3.通过Callable接口实现:1.FutureTask 2.线程池获取
线程状态:6个 新建、运行、无限期等待(需要唤醒)、
限期等待(一定时间后系统自动幻想)、阻塞、结束
sleep和wait的区别
sleep是Thread类的方法,wait是Object类中定义的方法
sleep方法可以在任何地方使用
wait只能在synchronized方法中使用
本质区别
Thread.sleep只会让出CPU,不会导致锁行为的改变。
Object.wait不仅会让出CPU,还会释放已经占有同步资源锁
notify和notifAll区别:
锁池,就是在等待锁被阻塞的所有线程组成的。
等待池,线程调用对象的wait()方法,线程就会释放这个对象的锁,同时线程也就进入到这个对象的等待池(等待池中的线程不会竞争对象的锁)。
notifyAll会让所有处于等待池的线程全部进入锁池去竞争获取锁的机会。
notify只会随机选取一个。
yield概念:
当调用Thread.yield()会给i线程调度器暗示当前的线程愿意让出CPU的暗示(但是不会影响锁的占用),但是线程调度器可能会忽略这个暗示。
中断线程:
interrupt,通知线程该中断了!
1.如果该线程处于阻塞的状态,那么线程将立即退出阻塞,并抛出InterrupttedException异常。
2.如果线程处于正常的活跃状态,那么该线程中断标记变为true,但是线程还会继续运行。
3.就有需要被调用的线程来配合中断,就是在抛出2中的异常后再catch里面结束线程,但是正常活跃的线程还在在继续运行,这样就保证了不会暴力打断线程。
线程安全问题的主要诱因
存在共享数据(临界资源)
存在多个线程操作这个共享的资源
解决思路:同一时刻同一时刻只允许一个线程来使用共享资源。
所有出现互斥锁,它的特性:
1.互斥性:在同一时刻只可以让一个线程持有某个对象锁(也叫原子性)。
2。可见性:锁释放之前对共享变量的修改,对于后续获得该变量的锁是可见的,保证数据一致性,'synchronized’满足需求。
根据获取的锁的分类:获取对象锁和获取类锁
获取对象锁
1.同步代码块(synchronized(this),synchronized(类实例对象))‘锁的是小括号中的实例对象’
2.同步非静态方法(synchronized method)‘锁是当前对象的实例对象’
获取类锁的两种方法:
1.通步代码块(synchronized(类,class))‘锁是小括号中的类对象Class对象’
2.同步静态方法(synchronized static method)‘锁的是当前对象的类对象Class对象’
synchronized基础
锁内存语义
当线程释放锁时,java内存模型会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,java内存模型会把该线程对应的本地内存标记为无效,这样就可实现被监视器保护的临界区代码必须从内存中读取共享变量。
synchronized 和 ReetrantLock区别
ReetrantLock,更细粒度的控制,性能不一定比前者高,并且也是可重入的。
java内存模型JMM
本身是一种抽象的概念,并不真实存在,是一个规范,定义了程序中各个变量的访问方式。
JMM主内存:
1.存储java实例对象2.成员变量,类信息,常量,变量等。3.属于共享数据区,多线程并发会有安全问题。
JMM工作内存:
存储当前方法的本地变量信息,这些信息多其它线程不可见。
归纳:基本数据类型存在工作内存栈帧结构,引用类型引用存在工作内存,实例存在主内存。成员变量,类信息在主内存。
happens-before:判断数据是否存在竞争,线程是否安全的。
volatile:保证共享变量对所有线程可见。
Java线程池:
1.利用Executors创建
好处:降低资源消耗、提高线程可管理性
网络编程
tcp:
1.面向连接、可靠、基于字节流的传输层协议。
2.将应用层的数据流分割成报文段并发送给目标节点的TCP。
3.数据包都有序号,对方接收到则发送ACK确认,没有就重新传。
4.奇偶效验检验传输过程是否有误。
tcp3次握手:
tcp的四次挥手:
Socket简介
UDP特点:
1.面向非连接2.支持多个客户端传输相同消息3.数据包报头只有(8个字节,TCP20个)开销小,4.吞吐只受限于计算机性能5.尽最大努力交付,不保证可靠交付。6.面向报文,不对提交报文进行拆分、合并。
TCP和UDP区别:
面向连接VS无连接
可靠性
有序性
速度
量级
TCP滑动窗口:
1.保证TCP的可靠性
2.保证TCP的流控特性
HTTP
超文本传输协议:
支持客户/服务端模式
简单快速
灵活
无连接
无状态
步骤:
客户端连接到Web服务器,发送HTTP请求,服务器接收请求并返回HTTP响应,释放连接TCP连接,客户端浏览解析HTML内容。
HTTP状态码:200成功,404找不到资源