JUC是java.util.concurrent包 并发编程的工具包

并发、并行
并发:多线程操作一个资源
并行:多人一起走 并发编程的本质:充分利用cpu的资源

线程的几个状态

新建 运行 堵塞 等待 销毁

wait/sleep区别

1.来自不同的类
wait->object
sleep->Thread
注:实际开发中线程休眠不要用Thread.sleep(5000);
建议使用juc的工具类
TimeUnit.DAYS.sleep(1);//睡1天
TimeUnit.SECONDS.sleep(2);//睡2秒 2.关于锁的释放
wait会释放锁 sleep抱着锁睡了不会释放 3.使用的范围不同
wait:必须在同步代码块中使用
sleep:可以在任何地方睡 //4.是否需要捕获异常
//wait不需要捕获异常 sleep必须捕获异常

Lock锁(重点)

Lock的实现类:
ReentrantLock //可重入锁(常用)
ReentrantReadWriteLock.ReadLock //读锁
ReentrantReadWriteLock.WriteLock //写锁 例子:
class Ticket22{
private int num=50;
Lock lock = new ReentrantLock();
public void sale(){
lock.lock();//加锁
try {
if (num>0){
System.out.println(Thread.currentThread().getName()+"卖出了"+(num--)+"张票,剩"+num);
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();//解锁
}
}
} 主要步骤:
//1.lock加锁
//2.执行方法体
//3.解锁
synchronized锁和Lock的区别
1.synchronized是java内置关键字 Lock是一个java类
2.synchronized无法判断锁的状态 Lock可以判断是否获取到锁
3.synchronized锁会自动解锁 Lock必须手动解锁
4.synchronized锁 线程1获得锁后 线程2只会傻傻的等待
Lock锁线程1获得锁后 线程2不一定会等待(lock.tryLock();)
5.synchronized可重入锁 不能中断 非公平
Lock锁 可重入锁 可以判断锁 非公平(可自己设置)
6.synchronized适合锁少量同步代码 Lock适合锁大量的同步代码

ReadWriteLock(读写锁)

用ReentrantLock锁也可以满足读写接口的线程安全
但若用ReentrantLock锁 读接口也只能跑一个线程了 效率不够高 ReentrantReadWriteLock锁比ReentrantLock锁更加细粒化
在写线程没跑时可以允许多个读线程跑

加锁解锁的写法与ReentrantLock基本一致

 private volatile Map map = new HashMap();//volatile多线程读取到变量最新
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
//写入
public void put(String key,Object val){
readWriteLock.writeLock().lock();//写锁锁定
try {
map.put(key,val);
System.out.println("写入");
}catch (Exception e){
e.printStackTrace();
}finally {
readWriteLock.writeLock().unlock();
}
}
//读取
public void get(String key){
readWriteLock.readLock().lock();//读锁
try {
System.out.println(map.get(key));
}catch (Exception e){
e.printStackTrace();
}finally {
readWriteLock.readLock().unlock();
}
}
												

JUC学习的更多相关文章

  1. JUC学习笔记(六)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  2. JUC学习笔记(五)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  3. JUC学习笔记(四)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  4. JUC学习笔记(三)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  5. JUC学习笔记(二)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...

  6. JUC学习笔记——进程与线程

    JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...

  7. JUC学习笔记——共享模型之管程

    JUC学习笔记--共享模型之管程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的管程部分 我们会分为以下几部分进行介绍: 共享问题 共享问题解决方案 线程安全分析 Monitor ...

  8. JUC学习笔记——共享模型之内存

    JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...

  9. JUC学习记录

    先附上学习的博客地址:http://blog.csdn.net/cx8122389/article/details/70049425, 具体见该博客 Java JUC 简介 在Java 5.0 提供了 ...

  10. JUC学习笔记--Atomic原子类

    J.U.C 框架学习顺序 http://blog.csdn.net/chen7253886/article/details/52769111 Atomic 原子操作类包 Atomic包 主要是在多线程 ...

随机推荐

  1. 将插件绑定在某个phase执行,推送镜像

    文章目录 将插件绑定在某个phase执行 推送镜像 将插件绑定在某个phase执行 需求:在执行mvn clean package 时,插件自动为构建Docker镜像. 实现:将插件的的goal绑定在 ...

  2. VXLAN配置实例(华为)

    常用命令总结: bridge-domain bd-id,创建广播域BD,并进入BD视图. description description,配置BD的描述信息. l2 binding vlan vlan ...

  3. HDU-4315 Climbing the Hill

    题目链接 先回到阶梯博弈的裸题中,比如POJ-1704,所有的块只能向左移并且不能跨越,这个向左移的结果我们可以理解为将左边的宽度减少使得右边的宽度增加,等同于阶梯模型中将石子从高阶移动到低阶.那么最 ...

  4. Luogu T7468 I liked Matrix!

    题目链接 题目背景 无 题目描述 在一个n*m 的矩阵A 的所有位置中随机填入0 或1,概率比为x : y.令B[i]=a[i][1]+a[i][2]+......+a[i][m],求min{B[i] ...

  5. 【uva 1442】Cav(算法效率)

    题意:有一个由N个片段构成宽度的洞穴,已知洞顶 si 和洞底 pi 的高度,要求储存尽量多的燃料. 解法:O(n),分别从1到N和从N到1扫一遍,调整每个片段合法的最大高度,求出答案. 1 #incl ...

  6. 【noi 2.6_9267】核电站(DP)

    题意:n个数中不能同时选连续m个或以上,问方案数. 解法:f[i][j]表示从前i个中选,到第i个已经连续选了j个.j!=0时,  =f[i-1][j-1] ; j=0时, =f[i-1][0~m-1 ...

  7. Codeforces Round #570 (Div. 3) B. Equalize Prices、C. Computer Game、D. Candy Box (easy version)、E. Subsequences (easy version)

    B题题意: 给你n个物品的价格,你需要找出来一个值b,使得每一个物品与这个b的差值的绝对值小于k.找到最大的b输出,如果找不到,那就输出-1 题解: 很简单嘛,找到上下限直接二分.下限就是所有物品中最 ...

  8. hdu5497 Inversion

    Problem Description You have a sequence {a1,a2,...,an} and you can delete a contiguous subsequence o ...

  9. 51Nod - 1632

    B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后 ...

  10. AtCoder Beginner Contest 177 E - Coprime (数学)

    题意:给你\(n\)个数,首先判断它们是否全都__两两互质__.然后再判断它们是否全都互质. 题解:判断所有数互质很简单,直接枚举跑个gcd就行,关键是第一个条件我们要怎么去判断,其实我们可以对所有数 ...