有哪些平面设计网站WordPress支持的数据库

news/2025/9/24 2:44:07/文章来源:
有哪些平面设计网站,WordPress支持的数据库,一 美食 视频网站模板下载安装,阳澄湖大闸蟹网站建设简述JDK中lock锁的机制#xff0c;其底层是一种无锁的架构实现的#xff0c;是否知道其是如何实现的 synchronized与lock lock是一个接口#xff0c;而synchronized是在JVM层面实现的。synchronized释放锁有两种方式#xff1a; 获取锁的线程执行完同步代码#xff0c;…简述JDK中lock锁的机制其底层是一种无锁的架构实现的是否知道其是如何实现的 synchronized与lock lock是一个接口而synchronized是在JVM层面实现的。synchronized释放锁有两种方式 获取锁的线程执行完同步代码释放锁 。线程执行发生异常jvm会让线程释放锁。 lock锁的释放出现异常时必须在finally中释放锁不然容易造成线程死锁。lock显式获取锁和释放锁提供超时获取锁、可中断地获取锁。 synchronized是以隐式地获取和释放锁synchronized无法中断一个正在等待获取锁的线程。 synchronized原始采用的是CPU悲观锁机制即线程获得的是独占锁。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。而在CPU转换线程阻塞时会引起线程上下文切换当有很多线程竞争锁的时候会引起CPU频繁的上下文切换导致效率很低。 Lock用的是乐观锁方式。所谓乐观锁就是每次不加锁而是假设没有冲突而去完成某项操作如果因为冲突失败就重试直到成功为止。乐观锁实现的机制就是CAS操作。 具体的悲观锁和乐观锁的详细介绍请参考这篇文章[浅谈数据库乐观锁、悲观锁] 在JDK5中增加了一个Lock接口实现类ReentrantLock.它不仅拥有和synchronized相同的并发性和内存语义,还多了锁投票,定时锁,等候和中断锁等.它们的性能在不同的情况下会有不同。 在资源竞争不是很激烈的情况下,synchronized的性能要由于ReentrantLock,但是在资源竞争很激烈的情况下,synchronized的性能会下降得非常快,而ReentrantLock的性能基本保持不变. 接下来我们会进一步研究ReentrantLock的源代码会发现其中比较重要的获得锁的一个方法是compareAndSetState。 lock源码 在阅读源码的成长的过程中有很多人会遇到很多困难一个是源码太多另一方面是源码看不懂。在阅读源码方面我提供一些个人的建议 第一个是抓主舍次看源码的时候很多人会发现源码太长太多看不下去这就要求我们抓住哪些是核心的方法哪些是次要的方法。当舍去次要方法就会发现代码精简和很多会大大提高我们阅读源码的信心。第二个是不要死扣有人看源码会一行一行的死扣当看到某一行看不懂就一直停在那里死扣知道看懂为止其实很多时候虽然看不懂代码但是可以从变量名和方法名知道该代码的作用java中都是见名知意的。 接下来进入阅读lock的源码部分在lock的接口中主要的方法如下 public interface Lock {// 加锁void lock()// 尝试获取锁boolean tryLock();boolean tryLock(long time, TimeUnit unit) throws InterruptedException;// 解锁void unlock(); }在lock接口的实现类中最主要的就是ReentrantLock来看看ReentrantLock中lock()方法的源码 // 默认构造方法非公平锁public ReentrantLock() {sync new NonfairSync();}// 构造方法公平锁public ReentrantLock(boolean fair) {sync fair ? new FairSync() : new NonfairSync();}// 加锁public void lock() {sync.lock();}在初始化lock实例对象的时候可以提供一个boolean的参数也可以不提供该参数。提供该参数就是公平锁不提供该参数就是非公平锁。 什么是非公平锁和公平锁呢 非公平锁就是不按照线程先来后到的时间顺序进行竞争锁后到的线程也能够获取到锁公平锁就是按照线程先来后到的顺序进行获取锁后到的线程只能等前面的线程都获取锁完毕才执行获取锁的操作执行有序。 我们来看看lock()这个方法这个有区分公平锁和非公平锁这个两者的实现不同先来看看公平锁源码如下 // 直接调用 acquire(1) final void lock() {acquire(1);}我们来看看acquire(1)的源码如下 public final void acquire(int arg) {if (!tryAcquire(arg) acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}这里的判断条件主要做两件事 通关过该方法tryAcquire(arg)尝试的获取锁若是没有获取到锁通过该方法acquireQueued(addWaiter(Node.EXCLUSIVE), arg)就将当前的线程加入到存储等待线程的队列中。 其中tryAcquire(arg是尝试获取锁这个方法是公平锁的核心之一它的源码如下 protected final boolean tryAcquire(int acquires) {// 获取当前线程 final Thread current Thread.currentThread();// 获取当前线程拥有着的状态int c getState();// 若为0说明当前线程拥有着已经释放锁if (c 0) {// 判断线程队列中是否有排在前面的线程等待着锁若是没有设置线程的状态为1。if (!hasQueuedPredecessors() compareAndSetState(0, acquires)) {// 设置线程的拥有着为当前线程setExclusiveOwnerThread(current);return true;}// 若是当前的线程的锁的拥有者就是当前线程可重入锁} else if (current getExclusiveOwnerThread()) {// 执行状态值1int nextc c acquires;if (nextc 0)throw new Error(Maximum lock count exceeded);// 设置status的值为nextcsetState(nextc);return true;}return false;}在tryAcquire()方法中主要是做了以下几件事 判断当前线程的锁的拥有者的状态值是否为0若为0通过该方法hasQueuedPredecessors()再判断等待线程队列中是否存在排在前面的线程。若是没有通过该方法 compareAndSetState(0, acquires)设置当前的线程状态为1。将线程拥有者设为当前线程setExclusiveOwnerThread(current)若是当前线程的锁的拥有者的状态值不为0说明当前的锁已经被占用通过current getExclusiveOwnerThread()判断锁的拥有者的线程是否为当前线程实现锁的可重入。若是当前线程将线程的状态值1并更新状态值。 公平锁的tryAcquire()实现的原理图如下 我们来看看acquireQueued()方法该方法是将线程加入等待的线程队列中源码如下 final boolean acquireQueued(final Node node, int arg) {boolean failed true;try {boolean interrupted false;// 死循环处理for (;;) {// 获取前置线程节点final Node p node.predecessor();// 这里又尝试的去获取锁if (p head tryAcquire(arg)) {setHead(node);p.next null; // help GCfailed false;// 直接return interruptedreturn interrupted;}// 在获取锁失败后应该将线程Park(暂停)if (shouldParkAfterFailedAcquire(p, node) parkAndCheckInterrupt())interrupted true;}} finally {if (failed)cancelAcquire(node);}}acquireQueued()方法主要执行以下几件事 死循环处理等待线程中的前置节点并尝试获取锁若是p head tryAcquire(arg)则跳出循环即获取锁成功。若是获取锁不成功shouldParkAfterFailedAcquire(p, node) parkAndCheckInterrupt()就会将线程暂停。 在acquire(int arg)方法中最后若是条件成立执行下面的源码 selfInterrupt(); // 实际执行的代码为 Thread.currentThread().interrupt();即尝试获取锁失败就会将锁加入等待的线程队列中并让线程处于中断等待。公平锁lock()方法执行的原理图如下 之所以画这些原理的的原因是为后面写一个自己的锁做铺垫因为你要实现和前人差不多的东西你必须了解该东西执行的步骤最后得出的结果执行的过程是怎么样的。 有了流程图在后面的实现自己的东西才能一步一步的进行。这也是阅读源码的必要之一。 在lock()方法其实在lock()方法中已经包含了两方面 锁方法lock()。尝试获取锁方法tryAquire()。 接下来我们来看一下unlock()方法的源码。 public void unlock() {sync.release(1);}直接调用release(1)方法来看release方法源码如下: public final boolean release(int arg) {// 尝试释放当前节点if (tryRelease(arg)) {// 取出头节点Node h head;if (h ! null h.waitStatus ! 0)// 释放锁后要即使唤醒等待的线程来获取锁unparkSuccessor(h);return true;}return false;}通过调用tryRelease(arg)尝试释放当前节点若是释放锁成功就会获取的等待队列中的头节点就会即使唤醒等待队列中的等待线程来获取锁。接下来看看tryRelease(arg)的源码如下 // 尝试释放锁protected final boolean tryRelease(int releases) {// 将当前状态值-1int c getState() - releases;// 判断当前线程是否是锁的拥有者若不是直接抛出异常非法操作直接一点的解释就是你都没有拥有锁还来释放锁这不是骗人的嘛if (Thread.currentThread() ! getExclusiveOwnerThread())throw new IllegalMonitorStateException();boolean free false;//执行释放锁操作 1.若状态值0 2.将当前的锁的拥有者设为nullif (c 0) {free true;setExclusiveOwnerThread(null);}// 重新更新status的状态值setState(c);return free;}总结上面的几个方法unlock释放锁方法的执行原理图如下 对于非公平锁与公平锁的区别在非公平锁尝试获取锁中不会执行hasQueuedPredecessors()去判断是否队列中还有等待的前置节点线程。 如下面的非公平锁尝试获取锁nonfairTryAcquire()源码如下 final boolean nonfairTryAcquire(int acquires) {final Thread current Thread.currentThread();int c getState();if (c 0) {// 直接就将status-1并不会判断是否还有前置线程在等待if (compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}}else if (current getExclusiveOwnerThread()) {int nextc c acquires;if (nextc 0) // overflowthrow new Error(Maximum lock count exceeded);setState(nextc);return true;}return false;}以上就是公平锁和非公平锁的主要的核心方法的源码接下来我们实现自己的一个锁首先依据前面的分析中要实现自己的锁拥有的锁的核心属性如下 状态值status0为未占用锁1未占用锁并且是线程安全的。等待线程队列用于存放获取锁的等待线程。当前线程的拥有者。 lock锁的核心的Api如下 lock方法trylock方法unlock方法 依据以上的核心思想来实现自己的锁首先定义状态值status使用的是AtomicInteger原子变量来存放状态值实现该状态值的并发安全和可见性。定义如下 // 线程的状态 0表示当前没有线程占用 1表示有线程占用AtomicInteger status new AtomicInteger();接下来定义等待线程队列使用LinkedBlockingQueue队列来装线程定义如下 // 等待的线程 LinkedBlockingQueueThread waiters new LinkedBlockingQueueThread();最后的属性为当前锁的拥有者直接就用Thread来封装定义如下 // 当前线程拥有者 Thread ownerThread null;接下来定义lock()方法依据上面的源码分析在lock方法中主要执行的几件事如下 死循环的处理等待线程队列中的线程知道获取锁成功将该线程从队列中删除跳出循环。获取锁不成功线程处于暂停等待。 Overridepublic void lock() {// TODO Auto-generated method stub// 尝试获取锁if (!tryLock()) {// 获取锁失败将锁加入等待的队列中waitersQueue.add(Thread.currentThread());// 死循环处理队列中的锁不断的获取锁for (;;) {if (tryLock()) {// 直到获取锁成功将该线程从等待队列中删除waitersQueue.poll();// 直接返回return;} else {// 获取锁不成功就直接暂停等待。LockSupport.park();}}}}然后是trylock方法依据上面的源码分析在trylock中主要执行的以下几件事 判断当前拥有锁的线程的状态是否为0为0执行状态值1并将当前线程设置为锁拥有者。实现锁可重入 Overridepublic boolean tryLock() {// 判断是否有现成占用if (status.get()0) {// 执行状态值加1if (status.compareAndSet(0, 1)) {// 将当前线程设置为锁拥有者ownerThread Thread.currentThread();return true;} else if(ownerThreadThread.currentThread()) {// 实现锁可重入status.set(status.get()1);}}return false;}最后就是unlock方法依据上面的源码分析在unlock中主要执行的事情如下 判断当前线程是否是锁拥有者若不是直接抛出异常。判断状态值是否为0并将锁拥有者清空唤醒等待的线程。 Overridepublic void unlock() {// TODO Auto-generated method stub// 判断当前线程是否是锁拥有者if (ownerThread!Thread.currentThread()) {throw new RuntimeException(非法操作);}// 判断状态值是否为0if (status.decrementAndGet()0) {// 清空锁拥有着ownerThread null;// 从等待队列中获取前置线程Thread t waitersQueue.peek();if (t!null) {// 并立即唤醒该线程LockSupport.unpark(t);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

左右左布局网站建设湖南十大软件公司介绍

最近,我一直在大量使用JBoss Drools进行项目。 我不是Drools专家-我也不太相信这个框架,或者可能不是只相信该项目中的特定用例-我发现很难为基于Drools的业务规则编写简单,可维护的单元测试 。 这就是junit-drools诞生的方式-简单的帮助程序…

如何自己开发微网站wordpress编辑父主题

在这个飞速发展的时代,我们越来越依赖各种工具来提高工作效率和解决问题。然而,你是否意识到,有些工具不仅仅是工具,它们还能为你带来更多的可能性和机遇?菜鸟工具箱就是这样一个超越工具本身的存在! 菜鸟工…

下载爱南宁官方网站网站建设费交文化事业

1.建立函数: def 函数名(形参): 函数体(记得写缩进) return 返回值(python中可以没有return) 2.调用函数: 函数名(实参) 实参和形参个数相等即可,类型不需要相同 其中接收返回值与C中的差不多 3.如果只是定义而不调用则函数不会执行 4.先定义函数,后调用 5.python中可以…

国外推广网站有什么广州十大传媒公司

对于IOS涉及文本输入常用的两个View是UITextView和UITextField,一个用于复杂文本输入,一个用于简单文本输入,在大多数开发中涉及文本输入的场景使用这两个View能够满足需求。但是对于富文本编辑相关的开发,这两个View就无法满足自…

微信的网站网站做关键词排名

转眼距离930离开鹅厂已经120天了,我是很能拖延的,或者是很懂自我麻痹的,这三个多月,一直想要写点东西纪念,一直拖一直拖一直拖…… 疫情这几年经济下行里裁员是个茶余饭后“嬉笑”之余经常被提起的词,部门滚…

温州高端品牌网站建设wordpress系统的特点

12月16日,在开放原子开源基金会主办的“2023开放原子开发者大会”上,蚂蚁集团主导开源的图数据库TuGraph、时序数据库CeresDB、隐私计算框架隐语SecretFlow、前端框架OpenSumi、数据域大模型开源框架DB-GPT入选“2023快速成长开源项目”。 (图…

给人做网站赚钱深圳罗湖住房和建设局网站官网

所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性: public 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型…

固镇网站建设哪家好短剧分销平台

文章目录 前言一、Python在物联网和传感器应用中的优势二、连接传感器和设备三、读取传感器数据四、示例代码和讲解五、进一步处理和分析传感器数据六、更多应用示例1、温湿度监测系统2、智能家居系统 - 灯光控制 总结 前言 物联网和传感器在现代科技中扮演着重要的角色。物联…

Day07-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\method-Demo041比较难

Java方法Java方法是语句的结合,他们在一起执行一个功能方法的命名规则:首字母小写+驼峰命名规则方法包含于类或者对象中方法在程序中被创建,在其他地方被调用最好保持原子性,一个方法一个功能System.out.printIn()…

巩义旅游网站设计公司有趣的网站知乎

W...Y的主页 😊 代码仓库分享 💕 前言:这是最后一篇Linux工具篇,今天这篇文章我们要来简单讲一件git与调试器gdb。 目录 使用 git 命令行 安装 git 在 Github 创建项目 注册账号 创建项目 ​编辑 下载项目到本地 在 Gite…

惠州中小企业网站制作四川企业seo推广

大家好,我是烤鸭: 今天分享一下有关 mysql 分区。 需求: 按时间分区。 对千万数据左右的表,进行分区,数据的增加量大概千万/年。 代码实现: 模拟之前已经存在的表: DROP TABLE IF EXISTS…

绍兴网站建设方案策划黄埔区建设局网站

前面我们看了一下Sharepoint服务器对象模型的物理对象层次(Physical Objects Hierarchy)和对象内容层次(Content Hierarchy)中的相关类,这里来看看服务层次结构,其中包括表示 Web 服务(WebService)、Windows 服务(WindowService)、其他类型的服务(Icomin…

网站兼职做计划赚小钱域名网站建设方案书

通过共现矩阵和余弦相似度实现机器对单词的认知、python实现本文介绍的定义:一、语料库预处理二、单词的分布式表示三、单词的相似度四、相似单词排序本文介绍的定义: 语料库、计数方法的目的、语料库预处理、单词的分布式表示、分布式假设、上下文、窗…

蚂蜂窝网站分析二级域名网站免费申请

目录 1 TVS管外观结构 2 TVS管常见品牌 ​编辑3 TVS管命名规则 4 TVS管工作原理 5 TVS基本特点 6 TVS典型应用 7 TVS管电气参数说明 7.1 VRWM 截止电压,IR 漏电流 7.2 VBR 击穿电压 7.3 IPP 峰值脉冲电流,VC 钳位电压 8 TVS选型注意事项 8.1…

建设网站外国人可搜到wordpress 导出md

文章目录 一、C语言传统的处理错误的方式二、C异常三、异常的使用3.1 异常的抛出和捕获3.1.1 异常的抛出和匹配原则3.1.2 在函数调用链中异常栈展开匹配原则 3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四、自定义异常体系五、C标准库的异常体系六、异常的优缺点6.1 优点6.2 …

安阳网站建设_电网商城

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、MySQL存…

百度收录网站与手机版超链接到网站怎么做视频文件下载

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

英语网站都可以做哪些内容网络技术人员

这两天猫在家里搞一个多线程的断点续传得C#程序,发现同时只能开2个线程下载,其他的线程一律要等待,这样就导致下载大文件时其他线程经常超时,郁闷好久。今天回公司无意中发现了一个帖子,终于真相大白了, …

求十大猎头公司排名深圳网站优化搜索

请求方式,分为GET与POST:GET最为常见的HTTP请求,普通上网浏览页面就是GET。GET方式的参数请求直接跟在URL后,以问号开始。(JS中用window.location.search获得)。参数可以用encodeURIComponent进行编码&…

网站营销的重点网站会员推广邀请系统

涨点效果 参考模型 参考的Block,如下图: 我对Block做了修改,修改后的结构图如下: 代码详解 from timm.models.layers import DropPathfrom torch import Tensor def channel_shuffle(x: Tensor, groups: