JUC学习
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学习的更多相关文章
- JUC学习笔记(六)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(五)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(四)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(三)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...
- JUC学习笔记(二)
JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html 1.Lock接口 1.1.Synchronized 1.1.1.Synchronized关 ...
- JUC学习笔记——进程与线程
JUC学习笔记--进程与线程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的进程与线程部分 我们会分为以下几部分进行介绍: 进程与线程 并发与并行 同步与异步 线程详解 进程与线程 ...
- JUC学习笔记——共享模型之管程
JUC学习笔记--共享模型之管程 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的管程部分 我们会分为以下几部分进行介绍: 共享问题 共享问题解决方案 线程安全分析 Monitor ...
- JUC学习笔记——共享模型之内存
JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...
- JUC学习记录
先附上学习的博客地址:http://blog.csdn.net/cx8122389/article/details/70049425, 具体见该博客 Java JUC 简介 在Java 5.0 提供了 ...
- JUC学习笔记--Atomic原子类
J.U.C 框架学习顺序 http://blog.csdn.net/chen7253886/article/details/52769111 Atomic 原子操作类包 Atomic包 主要是在多线程 ...
随机推荐
- Mysql 5.5升级5.8
前言,因为升级跳板机,需要将mariadb 升级到10.2,也就是对应MySQL的5.8,废话不多说下面开始进行mariadb 5.5 的升级 Welcome to the MariaDB monit ...
- java的volatile关键字(笔记)
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一 ...
- HanLP 下载和配置
方式一.Maven 为了方便用户,特提供内置了数据包的Portable版,只需在pom.xml加入: <dependency> <groupId>com.hankcs</ ...
- Codeforces Round #594 (Div. 2) D1 - The World Is Just a Programming Task
思路:枚举换的位置i,j 然后我们要先判断改序列能否完全匹配 如果可以 那我们就需要把差值最大的位置换过来 然后直接判断就行
- Codeforces Round #672 (Div. 2) D. Rescue Nibel!(排序)
题目链接:https://codeforces.com/contest/1420/problem/D 前言 之前写过这场比赛的题解,不过感觉这一题还可以再单独拿出来好好捋一下思路. 题意 给出 $n$ ...
- 2288.【POJ Challenge】生日礼物 链表+堆+贪心
BZOJ2288 [POJ Challenge]生日礼物 题意: 给一个长度为\(n\)的数组,最多可以选\(m\)个连续段,问选取的最大值是多少 题解: 先把连续的符号相同的值合并,头和尾的负数去掉 ...
- hdu5496 Beauty of Sequence
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- 洛谷 P2391.白雪皑皑 (并查集,思维)
题意:有\(n\)个点,对这些点进行\(m\)次染色,第\(i\)次染色会把区间\((i*p+q)\ mod\ N+1\)和\((i*q+p)\ mod\ N+1\)之间的点染成颜色\(i\),问最后 ...
- Codeforces Round #531 (Div. 3) C. Doors Breaking and Repairing (博弈)
题意:有\(n\)扇门,你每次可以攻击某个门,使其hp减少\(x\)(\(\le 0\)后就不可修复了),之后警察会修复某个门,使其hp增加\(y\),问你最多可以破坏多少扇门? 题解:首先如果\(x ...
- Educational DP Contest E - Knapsack 2 (01背包进阶版)
题意:有\(n\)个物品,第\(i\)个物品价值\(v_{i}\),体积为\(w_{i}\),你有容量为\(W\)的背包,求能放物品的最大价值. 题解:经典01背包,但是物品的最大体积给到了\(10^ ...