赞
踩
进程:操作系统分配资源的基本单位,例如JVM
进程、.exe
可执行文件运行后是进程、main
主方法是线程
线程:任务调度和执行的基本单位
一个进程包含多个线程,进程有独立的内存空间,线程共享堆、方法区,私有程序计数器、虚拟栈、本地方法栈
好处:加快查询效率,类似书的目录
坏处:索引需要存储到磁盘,增加存储的压力
注意:定义了索引不一定生效,例最左前缀,id、name、age,(name、age)
进程包含多个线程,进程能够并发执行多个线程,即可以执行多个任务
优点:提升程序运行效率,减少响应时间
多线程同时操作共享资源时就会出现线程安全问题
解决方案:原子类、volatile
、锁
原子类:JUC(java.util.concurrent)
包下的atomic
包的类,通过CAS(compare and swap)
比较与交换来保证单个变量的线程安全,CAS
通过预期值和内存值的比较来判断是否修改
volatile
:实现变量的可见性、防止指令重排,防止指令重排意思是只能向一个方向操作,防止颠倒,例如还没赋值就使用了
锁:保证多个变量的线程安全
synchronize
关键字:给对象加锁,防止其他线程访问共享资源,进而保证临界区内的变量在多线程下的安全,主要是通过flag标记acc-synchronize,线程执行先获取同步锁,其次执行方法,最后释放锁lock
接口:lock
锁住,unlock
解锁,基于AQS(AbstractQueueSynchronizer)
抽象队列同步器实现,加锁解锁实际是操作AQS
的state
变量补充:
JUC
包下的类,例Semaphore
信号量、CountDownLatch
、CyclicBarrier
ThreadLocal
:为每个线程创建单独的资源,线程之间互不影响,即把共享资源复制成多份,它们访问的是自己独占的资源,隔离了多个线程之间的数据共享
定义:两个或两个以上的进程争夺共享资源造成互相等待,如果没有外力的作用,则一直等待下去,这种状态就称为死锁
4个必要条件:必要条件说明发生死锁,一定有四个条件,但四个条件都成立,不一定发生锁
p1
等待p2
资源,p2
等待p3
,pn-1
等待pn
,pn
等待p1
socket
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。