对JUC的学习和理解(一):Lock、生产者和消费者问题、虚假唤醒、多线程8锁
目录
什么是JUC?
通过写售票代码回顾Synchronized和认识Lock
Synchronized
Lock
synchorized与Lock锁的区别
Synochorized的生产者和消费者问题
虚假唤醒问题
Lock中的生产者和消费者问题
深入理解Java锁
什么是JUC?
在Java 5.0时提供了 java.lang.concurrent 这个包,这个包简称JUC包,提供了一些处理并发编程下的一些工具类。
通过写售票代码回顾Synchronized和认识Lock
售票这段代码在学习多线程的时候是必定绕不开的一环,多个线程同时去争抢票这个资源。
那么我们再写写这个卖票的代码,思路核心是多线程操作同一资源类,资源类是单独的,没有任何附属操作,它就只有属性和方法。
Synchronized
资源类 Ticket
/*** 资源类 Ticket*/
class Ticket2 {private int ticket = 30;public void sale() {if (ticket>0){System.out.println(Thread.currentThread().getName() + "售出第" + ticket-- + "张票" + "还剩" + ticket + "张票");}}
}
线程类:使用了匿名内部类来减少了代码量
public static void main(String[] args) {Ticket2 ticket = new Ticket2();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 40; i++) {ticket.sale();}}}, "A").start();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 40; i++) {ticket.sale();} }}, "B").start();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 40; i++) {ticket.sale();} }}, "C").start();}
但推荐使用Lambda表达式,看起来更加简洁。
public static void main(String[] args) {Ticket2 ticket = new Ticket2();new Thread(()->{ for (int i = 0; i < 40; i++) { ticket.sale(); } }, "A").start();new Thread(()->{ for (int i = 0; i < 40; i++) { ticket.sale(); } }, "B").start();new Thread(()->{ for (int i = 0; i < 40; i++) { ticket.sale(); } }, "C").start();}
目前为止,代码是线程不安全的,要想实现线程同步,初学的时候使用的是Sychorized,同步代码块或者方法,在资源类的方法上加上synchronize即可,这就是一个普通的线程同步方法。
public synchronized void sale() {if (ticket>0){System.out.println(Thread.currentThread().getName() + "售出第" + ticket-- + "张票" + "还剩" + ticket + "张票");}}
学习J.U.C,就是学习java.util.concurrent包下的一些工具类来解决并发的问题。
接下来使用Lock类来解决线程安全问题。
Lock
Java 1.8中的Lock接口的三个实现类。
我们现在使用的是RenntrantLock,它需要显示的加锁和解锁,并需要与trycatch一起使用。
- 实例化Reentrantlock
- lock.lock(加锁)
- lock.unlock(解锁)
这样,就使用了Lock来实现了线程安全。
/*** 资源类 Ticket*/
class Ticket2 {private int ticket = 30;// 实例化ReentrantLockReentrantLock lock = new ReentrantLock();public void sale() {// 开启锁lock.lock();try {if (ticket>0){System.out.println(Thread.currentThread().getName() + "售出第" + ticket-- + "张票" + "还剩" + ticket + "张票");}} catch (Exception e) {e.printStackTrace();} finally {// 关闭锁lock.unlock();}}
}
synchorized与Lock锁的区别
- Synchorized 是内置的Java关键字,Lock锁是一个java类
- Synchorized 无法判断获取锁的状态,Lock可以判断是否获取到了锁
- Synchorized 会自动释放锁,lock必须要手动释放锁,如果不手动释放锁,会导致死锁
- 如果发生了某个线程阻塞,Synchorized会一直等待,Lock锁不一定会等待下去(通过lock.trylock去尝试获得锁)
- Synchorized 可重入锁,不可以中断,是非公平锁;Lock可重入锁,可以判断锁,非公平(可以自己设置)
- Synchorized 适合锁少量的代码同步问题,Lock适合锁大量的同步代码
解释一下可重入锁:
可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁
Synochorized的生产者和消费者问题
生产者和消费者问题用于理解线程之间的通讯,其思路是一个共同资源类被多线程操作并且交替执行。
如果不能理解如何写这种多线程操作并且交替执行的代码,先想想思路:
- 资源类
- 生产:判断等待-->业务(生产)-->通知其他线程
- 消费:判断等待-->业务(消费)-->通知其他线程
- 主方法
- 创建线程并开启线程
/*** 生产者与消费者问题* 问题:现在两个线程,可以操作初始值为零的一个变量* 实现一个线程对该变量+1,一个线程对该变量-1* 实现10轮交替,变量初始值为0*** 思路:高内聚低耦合的思路,线程操作资源类* ---> 判断/业务/通知** @author Claw* @date 2020/6/8 16:36.*/
public class ConsumersAndProducers {public static void main(String[] args) {Product product = new Product();new Thread(() -> {for (int i = 0; i < 10; i++) {product.toProduct();}}, "A").start();new Thread(() -> {for (int i = 0; i < 10; i++) {product.toConsume();}}, "B").start();}
}/*** 资源类*/
class Product {private int product = 0;/*** 生产者*/public synchronized void toProduct() {// 判断等待if (product !=0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}// 业务操作product++;System.out.println(Thread.currentThread().getName()+"------->"+product);// 通知this.notifyAll();}/*** 消费者*/public synchronized void toConsume() {// 判断等待if (product==0){try {wait();} catch (InterruptedException e) {e.printStackTrace();}}// 业务操作product--;System.out.println(Thread.currentThread().getName()+"------->"+product);// 通知this.notifyAll();}
结果:
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
A------->1
B------->0
这样看似没有什么问题,但如果有更多的线程进来,会导致一个问题,叫做虚假唤醒。
虚假唤醒问题
在主方法中新加两个线程
new Thread(() -> {for (int i = 0; i < 10; i++) {product.toProduct();}}, "C").start();new Thread(() -> {for (int i = 0; i < 10; i++) {product.toConsume();}}, "D").start();
执行结果:在这里截取了结果异常的一段,可以看到出现了异常的数量2和3。
这是为什么呢?API里解释了线程也可以被唤醒,而不会被通知,中断或超时,这就是所谓的虚假唤醒,等待应该总是出现在循环之中。
在上面的代码中,条件判断使用了if而不是while,这导致了虚假唤醒。
多线程的交互必须用while
While的本质是循环+判断,线程被唤醒后,需要重新判断是否符合运行条件。
而if只判断了一次
看看这个错误的结果,为什么两个线程没有问题,而4个线程出现了问题?
A和C是生产者,B和D是消费者
当A线程生产完毕后,ABCD四个线程都准备操作product,理想情况下,生产一个消费一个是我们想要的模式,所以我们会想着生产线程完毕,消费的线程进来。但事实上不是如此,当A线程生产完毕后,进来的是生产者线程C,此时product为1,我们使用if作为条件判断,当product !=0时,条件判断为true,C线程执行到wait()处,开始等待,释放了锁。此时product仍然为1,ABD三条线程开始想操作product,现在进入方法的仍然是A,执行到wait()后开始等待。
然后A和C两个生产线程都进行等待了,剩下的线程只剩下消费者线程。此时product为1,消费线程消费完product,唤醒其他线程,因为和C两个线程已经等待许久,系统会优先让A和C先执行,此时product为0,但因为使用了if语句作为条件判断,已经不满足条件了,但if不会判断第二次,唤醒后的A和C两个线程同时进行了++,product由1变成2。
所以需要使用while作为条件判断。
Lock中的生产者和消费者问题
上面的synchorized来体会的生产者消费者的问题并不是对JUC学习的目的,而是回顾。
J.U.C中,Lock替代了synchronized方法和语句的使用,Condition替代了Object监视器方法的使用。
synchronized让线程通讯的方法是:wait(),notify(),notifyAll().
Condition的与此相对应的方法是:await(),sign(),signAll()
Condition是一种广义上的条件队列。他为线程提供了一种更为灵活的等待/通知模式,线程在调用await方法后执行挂起操作,直到线程等待的某个条件为真时才会被唤醒。Condition必须要配合锁一起使用,因为对共享状态变量的访问发生在多线程环境下。一个Condition的实例必须与一个Lock绑定,因此Condition一般都是作为Lock的内部实现。
参考:JAVA并发-Condition
所以使用Lock来实现线程同步和通讯中,生产者和消费者问题的代码是这样的:
/*** 资源类*/
class Product2 {private int product = 0;// 实例化ReentrantLockprivate ReentrantLock lock = new ReentrantLock();// 实例化Conditionprivate Condition condition = lock.newCondition();/*** 生产者*/public synchronized void toProduct() {// 判断等待while (product !=0){try {condition.await();} catch (InterruptedException e) {e.printStackTrace();}}// 业务操作product++;System.out.println(Thread.currentThread().getName()+"------->"+product);// 通知condition.signalAll();}/*** 消费者*/public synchronized void toConsume() {// 判断等待while (product==0){try {wait();} catch (InterruptedException e) {e.printStackTrace();}}// 业务操作product--;System.out.println(Thread.currentThread().getName()+"------->"+product);// 通知condition.signalAll();}
}
这样看来,与使用synchronize并没有什么优势的地方。
但Condition的强大之处是它可以为多个线程建立不同的Condition,让线程精准通讯,比如控制A线程执行完以后执行B,B执行完以后执行C。
/*** 需求:多线程之间按顺序调用,实现A-B-C* 三个线程启动,要求如下* <p>* AA打印3次,BB打印3次,CC打印3次* 循环3次** @author Claw* @date 2020/6/9 3:14.*/
public class DataShare {public static void main(String[] args) {ShareResources sr = new ShareResources();new Thread(() -> {for (int i = 0; i < 3; i++) {sr.printA();}}, "线程1").start();new Thread(() -> {for (int i = 0; i < 3; i++) {sr.printB();}}, "线程2").start();new Thread(() -> {for (int i = 0; i < 3; i++) {sr.printC();}}, "线程3").start();}
}/*** 资源类*/
class ShareResources {// 实例化ReentrantLockReentrantLock lock = new ReentrantLock();// 实例化 ConditionCondition c1 = lock.newCondition();Condition c2 = lock.newCondition();Condition c3 = lock.newCondition();/*** 标志位:A:1 B:2 C:3*/private int number = 1;public void printA() {// 加锁lock.lock();// 判断等待try {while (number != 1) {c1.await();}// 业务for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + "\t" + "AA");}// 设置标志位number = 2;// 通知c2.signal();} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}public void printB() {// 加锁lock.lock();try {while (number != 2) {// 判断等待c2.await();}for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + "\t" + "BBB");}// 标志位更改number = 3;// 通知c3.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}public void printC() {// 加锁lock.lock();try {while (number != 3) {// 判断等待c3.await();}// 业务for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + "\t" + "CCC");}// 标志位更改number = 1;// 通知c1.signal();} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}}
}
深入理解Java锁
请看这段代码:
public class SynchronizedTest {public static void main(String[] args) {Phone phone = new Phone();new Thread(() -> { phone.sendEmail(); }).start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> { phone.sendMsg(); }).start();}
}/*** 资源类*/
class Phone {public synchronized void sendEmail() {System.out.println("发邮件");}public synchronized void sendMsg() {System.out.println("发短信");}
}
- 标准访问,请问是先打印邮件还是短信?
结果:发邮件-->发短信
- 暂停4秒在邮件方法,请问打邮件还是短信?
在sendEmail中让线程休眠4秒
public synchronized void sendEmail() {try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发邮件");}
结果: 仍然为发邮件--->发短信
为什么?问题1和问题2是一样的
一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中一个synchronized方法了,其他线程只能等待,换句话说,某一个时刻内,其他线程都不能进入到当前对象的其他synchronized方法。
锁的是当前对象this(也就是资源类Phone),被锁定后,其他线程线程都不能进入到当前对象的其他的synchronized方法。
两个方法用的都是同一把锁,所以一次只能进入一个线程。
- 新增普通SayHello方法,请问先打印邮件还是hello?
/*** 资源类*/
class Phone {public synchronized void sendEmail() {try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发邮件");}public synchronized void sendMsg() {System.out.println("发短信");}// 增加一个普通方法public void hello(){System.out.println("hello");}
}
让线程去调用发邮件以及hello的方法
public static void main(String[] args) {Phone phone = new Phone();new Thread(() -> { phone.sendEmail(); }).start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> { phone.hello(); }).start();}
结果:
为什么?
因为普通方法与同步锁无关
- 两部手机,请问先打印邮件还是短信?
再实例化一个Phone类,一个实例对象去调用发邮件,一个实例去调用发短信,那么结果是什么?
public class SynchronizedTest {public static void main(String[] args) {Phone phone = new Phone();Phone phone2 = new Phone();new Thread(() -> { phone.sendEmail(); }).start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> { phone2.sendMsg(); }).start();}
}/*** 资源类*/
class Phone {public synchronized void sendEmail() {try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发邮件");}public synchronized void sendMsg() {System.out.println("发短信");}public void hello(){System.out.println("hello");}
}
结果:
为什么?
因为是两个对象,不是再共用一把锁,不冲突也不影响。
- 两个静态同步方法,同一部手机,请问先打印邮件还是短信?
将资源类的发邮件和发短信改为静态同步方法
public class SynchronizedTest {public static void main(String[] args) {Phone phone = new Phone();Phone phone2 = new Phone();new Thread(() -> { phone.sendEmail(); }).start();try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> { phone.sendMsg(); }).start();}
}/*** 资源类*/
class Phone {public static synchronized void sendEmail() {try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发邮件");}public static synchronized void sendMsg() {System.out.println("发短信");}public void hello(){System.out.println("hello");}
}
结果:
为什么?
synchronized修饰的同步方法,锁的是当前对象this,而对于静态同步方法,锁的就是整个Person类
- 两个静态同步方法,2部手机,请问先打印邮件还是短信?
如果是两个手机,执行结果如何?这个跟上面的方法是一个意思。静态同步方法锁的对象是当前类的Class对象,因此谁先拿到锁,谁先执行。
- 1个静态同步方法,1个普通同步方法,同一部手机,请问先打印邮件还是短信?
public static synchronized void sendEmail() {try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("发邮件");}public synchronized void sendMsg() {System.out.println("发短信");}
为什么?
静态同步方法和普通同步方法不是同一把锁,因此调用方法时不再需要等待。
- 1个静态同步方法,1个普通同步方法,2部手机,请问先打印邮件还是短信?
为什么?
因为既不是同一把锁,也不是争抢同一资源,不会互相影响。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- python中的for else
https://blog.csdn.net/nyist327/article/details/47806549...
2024/4/15 4:43:01 - LU分解解线性方程组python实现
本人是湖南大学的一名力学学生,2020年上数值分析课时写下的作业,希望对大家有所帮助,一起进步。 1、下面是自己整理的LU解线性方程组的基本理论。2、接下来是python实现代码 import numpy as npdef LU(A):生成值全位0的U矩阵,和单位矩阵LL = np.eye(len(A))U = np.zeros(np…...
2024/4/15 4:43:00 - JavaWeb相关知识简介
1.什么是Web程序通过浏览器访问的程序2静态页面表现形式:不会自动更新所需技术:HTML,css3动态页面表现形式:根据程序,自动更新所需技术:HTML,css,数据库,Java,JavaScript4,手工编写第一个Javaweb程序(1)在webapps创建项目目录(2)编写index.jsp(直接copy一个HTML内…...
2024/4/29 1:19:47 - jq选择器传变量给单选按钮
var vl= 2$("input[name=fdCategory][value="+vl+"]").attr("checked",true);...
2024/4/15 4:42:58 - 使用userdel命令删除Linux系统中用户
这个命令比较简单,就是删除用户。命令格式如下: [root@localhost ~]# userdel [-r] 用户名 选项 说明-r 在删除用户的同时删除用户的家目录在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。 前面我们说过,可以手动修改用…...
2024/4/24 12:10:52 - 【行情】合并结束时的比特币价格:BTC / USD目标为10,500美元和11,000美元
比特币价格在触及9.900美元的壁垒后进入9.600美元的进站。 随着交易量激增,合并最终可能让位于10.000美元以上的收益。 比特币价格在周末时段触及略低于$ 9.900的障碍后继续延长巩固期。很难维持在9800美元上方,相反,价格周一暴跌以测试9600美元的支撑位。尽管下跌,但比特币…...
2024/4/24 12:10:50 - Web系统功能测试18个点总结【乐搏TestPRO】
1、页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。2、相关性检查:功能相关性:删除/增加一项会不会对其它项产生影响,如果禅僧影响,这些影响是否都正确。如:增加某个数据记录后,如果该数据记录某个字段内容较长,是否会影响查询功能。数据相关性:如…...
2024/5/1 15:43:40 - recycleview条目状态显示重复
当我们通过用户交互改变recyclerview中的某个item的显示状态后,向下滑动会发现每间隔9个item就会出现同样的显示状态,但是我们明明没有对这个item进行操作,为什么会自动显示操作后的状态呢? 其实原因很简单,因为缓存问题 只要在相应的activity或者fragment添加下面一行代码…...
2024/4/24 12:10:41 - 微信返利机器人开发制作
微信返利机器人开发,业务需求根据用户发送商品,微信自动查询返利,并且发送给用户,随着微信的普及与用户日常使用增多,开发微信返利机器人,方便用户查找优惠商品省钱,实现一对一服务。 对此开发微信返利机器人实现用户查找商品获取优惠卷。 由于pc电脑版微信大多使用hook…...
2024/4/24 12:10:40 - 使用eclipse开发Javaweb程序
1.web项目的虚拟路径在eclipse中右击项目,选择properties,再选web project settings,看到的context root 就是虚拟路径2.jsp:java server page ,本质是一个servlet(一个Java类)目的是为了能在Java中使用HTML标签在服务器端执行3.jsp页面元素(1)静态内容:不更新的HTML内…...
2024/4/24 12:10:42 - python 按照标点符号切分句子,去除标点符号,判断字符串是否包含中文
最近在处理文本,发现切分句子,去除标点符号,判断字符串是否包含中文经常会用到,我这里分享一下我的代码:切分句子import re def split_sentences(line):line_split = re.split(r[。!;?,],line.strip())line_split = [line.strip() for line in line_split if line.str…...
2024/4/24 12:10:45 - jvm你知道多少&你想学什么
jvm你知道多少&你想学什么 首先大致介绍下jvm虚拟机栈 ----> 运行时数据区的一部分 JVM调优 ---->更好利用好JVM资源,达到最佳效果 垃圾回收机制 ---->OK JVM的应用 ---->调优,比较不同的JVM的差别 堆 ---->运行时数据区中的一部…...
2024/4/24 12:10:40 - jsp的代码格式的基础知识
1.jsp注释(1)HTML的注释: <!--注释内容-->,在浏览器查看源可见(2)jsp注释:<%--注释内容--%>,在浏览器查看源不可见(3)jsp脚本注释://注释内容/*注释内容*/,在浏览器查看源不可见2.jsp脚本代码格式语法:<%java代码%>注意:println在jsp中不是换行,…...
2024/5/4 0:11:16 - java实现多级菜单(树状图)
实体类:public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单顺序private int order;// 子菜单private List<Menu> children;// .…...
2024/4/29 9:27:55 - 乐鑫笔试题
一、将一个串行执行的C语言算法转化为单拍完成的并行可综合verilog unsigned char cal_table_high_first(unsigned char value) {unsigned char i ; unsigned char checksum = value ; for (i=8;i>0;--i){if (check_sum & 0x80){check_sum = (check_sum<<1) ^ 0x…...
2024/4/24 12:10:34 - UE4离远之后,远处的物体阴影消失了的解决方法
选中产生阴影的光源, (我这里只用了一个主光源) 。 搜索 Shadow Bisa (阴影偏移) 修改数值。搜索 Shadow Filter Sharpen(阴影波纹过滤)简单的说这个相当于阴影的锐利程度在project settings - Engine - rendering ,勾选Generate Mesh Distance Fields,重启工程选中…...
2024/4/24 12:10:34 - 线性递归C++
【题目描述】 利用递归的方法寻找数组中的最小值。 【输入描述】 输入共两行; 第一行,一个整数 n(1<=n<=100),n表示接下来输入数字的个数; 第二行,输入 n 个整数,数字之间用空格隔开。 【输出描述】 输出一个数组中最小的值。 【样例输入】 10 1 2 3 4 5 6 7 8 9 1…...
2024/4/24 12:10:32 - Vue流程判断if|else
前言 使用vue在页面做对数据做逻辑判断,最常见的if,if-else,else操作的流程分支语句,如下图: <Col span="6" v-for="(dd,index) in data" :key="index" style="margin:0px 20px 20px"><Card :bordered="false"&…...
2024/4/24 12:10:38 - spring boot 2.3 jpa querydsl 调整 dsl 的包路径
添加插件 生成 Q…实体 <!--添加QueryDSL插件支持--><plugin><groupId>com.mysema.maven</groupId><artifactId>apt-maven-plugin</artifactId><version>1.1.3</version><dependencies><dependency><groupId&g…...
2024/4/24 12:10:33 - 第三方工具连接Mysql时报错:ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password’ cannot be loaded:
本地MySQL安装版本较新,用Naviact连接时报错【ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password’ cannot be loaded: £¡£.】mysql服务本机登录无异常。登录后先验证了root用户的权限(我用的root远程登录);查看root用户权限:show grant…...
2024/4/24 12:10:36
最新文章
- Go协程的底层原理(图文详解)
为什么要有协程 什么是进程 操作系统“程序”的最小单位进程用来占用内存空间进程相当于厂房,占用工厂空间 什么是线程 进程如果比作厂房,线程就是厂房里面的生产线: 每个进程可以有多个线程线程使用系统分配给进程的内存,线…...
2024/5/4 0:31:48 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...
2024/5/1 13:12:26 - 权限提升-Linux系统权限提升篇VulnhubRbash绕过DockerLXD容器History泄漏shell交互
知识点 1、普通用户到Linux-泄漏-History 2、普通用户到Linux-限制-Rbash绕过 3、普通用户到Linux-容器-LXD&Docker 4.Linux系统提权-web/普通用户-docker逃逸&提权&shell交互 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及…...
2024/5/1 13:20:00 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57