- 浏览: 498701 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
java ReentrantLock应用
ReentrantLock可重入锁
1.使用ReentrantLock接口要比使用synchronized关键字效率高一些
不公平锁与公平锁的区别:
1.公平情况下,操作会排一个队按顺序执行,来保证执行顺序。(会消耗更多的时间来排队)
2.不公平情况下,是无序状态允许插队,jvm会自动计算如何处理更快速来调度插队。(如果不关心顺序,这个速度会更快)
例子:
参考原文:http://blog.csdn.net/woaieillen/article/details/8046876
参考原文:http://www.cnblogs.com/xiaorenwu702/p/3975916.html
参考原文:https://my.oschina.net/andylucc/blog/651982
ReentrantLock可重入锁
1.使用ReentrantLock接口要比使用synchronized关键字效率高一些
不公平锁与公平锁的区别:
private ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁 private ReentrantLock lock = new ReentrantLock(true); //公平锁
1.公平情况下,操作会排一个队按顺序执行,来保证执行顺序。(会消耗更多的时间来排队)
2.不公平情况下,是无序状态允许插队,jvm会自动计算如何处理更快速来调度插队。(如果不关心顺序,这个速度会更快)
例子:
import java.util.concurrent.locks.ReentrantLock; public class addI extends Thread { private static int i = 0; private static ReentrantLock reentrantLock = new ReentrantLock(); private int threadId = 0; @Override public void run() { //等待一个一个 try { reentrantLock.lock(); i++; } catch (Exception e) { e.printStackTrace(); } finally { // 解锁 reentrantLock.unlock(); } //如果已加锁,则不再重复加锁 // if (reentrantLock.tryLock()) { //如果得不到锁就直接不执行 // try { // i++; // } catch (Exception e) { // e.printStackTrace(); // } finally { // // 解锁 // reentrantLock.unlock(); // } // } //如果发现该操作已经在执行,则尝试等待一段时间,等待超时则不执行(尝试等待执行)(实际应用会比较多用这种方式) // try { // //如果已经被lock,尝试等待5s,看是否可以获得锁,如果5s后仍然无法获得锁则返回false继续执行 // if (reentrantLock.tryLock(5, TimeUnit.SECONDS)) { // try { // i++; // }catch (Exception e) { // e.printStackTrace(); // } finally { // // 解锁 // reentrantLock.unlock(); // } // } // // } catch (InterruptedException e) { // e.printStackTrace(); //当前线程被中断时(interrupt),会抛InterruptedException // } //可中断锁 // try { // reentrantLock.lockInterruptibly(); //可以用线程的.interrupt()接口打断 // //操作 // } catch (InterruptedException e) { // e.printStackTrace(); // } finally { // reentrantLock.unlock(); // } System.out.println("threadId = " + threadId + " i= " + i); } public addI(int threadId) { super(); this.threadId = threadId; } }
public class ReentrantLockTest { public static void main(String[] args) { Thread thread[] = new Thread[10]; for (int i = 0; i < 10; i++) { thread[i] = new addI(i); } for (int i = 0; i < 10; i++) { thread[i].start(); } } }
参考原文:http://blog.csdn.net/woaieillen/article/details/8046876
参考原文:http://www.cnblogs.com/xiaorenwu702/p/3975916.html
参考原文:https://my.oschina.net/andylucc/blog/651982
发表评论
-
elasticSearch使用
2022-04-27 08:42 421ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 250大小写转换快捷键 ctr+shift+u IDEA ... -
每天学到的技术点3
2022-02-21 20:01 2501.TEXT与BLOB的区别,二者 ... -
zookeeper dubbo 安装
2021-12-04 19:27 323docker-machine ssh default d ... -
JVM 调优与测试
2021-05-22 22:24 585VisualVM 能够监控线程,内存情况,查看方法的CPU ... -
百度人脸识别
2021-05-21 16:11 366package com.gaojinsoft.htwy.y20 ... -
springboot tomcat 参数配置与数据库连接池多少的性能分析
2021-05-12 22:15 565参数配置与数据库连接池多少的性能分析 tomcat线程数 ... -
log4j2应用
2020-07-23 14:16 367https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4241.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
base64与file 相互转换
2019-10-23 18:19 783base64与file 相互转换 import org. ... -
百度身份证识别
2019-10-18 18:19 693package com.gaojinsoft.htwy.y20 ... -
JAVA 实用方法
2019-05-16 09:50 358//得到xml文件中的sql文本 public St ... -
导出内容到excel文件方法
2019-05-15 10:52 513@SuppressWarnings("rawtype ... -
要求fsss
2019-09-21 21:30 311/* */ package com.midea.com ... -
反射、类信息、动态代理、CGLIB动态代理原理与测试
2019-01-29 21:04 488package com.midea.common.classT ... -
JVM 监控工具
2019-01-21 18:04 383JVM 监控工具 //========== ... -
java 线程池线程复用原理
2019-01-15 17:10 1164java 线程池线程复用原理 其实就一个大run()把其 ... -
LockSupport原理
2019-01-11 18:01 703LockSupport原理 在Java语言中,每一个对象有 ... -
runnable与thread 区别
2019-01-11 14:49 683runnable与thread 区别 在java中可有两种 ... -
Java的Future模式
2019-01-11 10:08 449Java的Future模式 runnable与thread ...
相关推荐
在Java多线程编程中,ReentrantLock提供了更灵活的锁管理机制,相比synchronized,它允许更细粒度的控制,并且提供了更多的同步原语。以下是一些使用ReentrantLock的关键点: 1. **可重入性**:ReentrantLock允许一...
《ReentrantLock源码详解与应用》 ReentrantLock,可重入锁,是Java并发编程中一个重要的锁实现,它提供了比synchronized更高级别的控制能力,包括公平性和非公平性选择。本文将深入探讨ReentrantLock的原理,特别...
通过对ReentrantLock和synchronized的全面比较,帮助开发者更好地理解和应用这两种锁定机制。 其他说明:本文不仅提供了理论上的分析,还附带了大量的代码实例,有助于读者通过实践加深理解。此外,对于一些复杂的...
标题“Java帮助和Web应用”表明这份文档是关于Java语言的帮助指南,并且特别强调了其在Web应用程序开发方面的应用。这暗示着文档内容不仅会涵盖Java基础知识,还会涉及如何使用Java进行Web开发的相关技术。 #### ...
Lock、Synchronized 和 ReentrantLock 是 Java 中三种常用的同步机制,每种机制都有其特点和使用场景。下面对这三种机制进行详细的分析和比较。 一、Synchronized Synchronized 是 Java 中最基本的同步机制,它...
Java提供了多种工具来解决这些问题,如synchronized、volatile、ReentrantLock等。 线程的优先级也是重要概念,Java中的Thread类定义了线程优先级,但实际调度仍然取决于操作系统。优先级高的线程通常有更高的执行...
Java作为一门广泛使用的编程语言,其高级应用涵盖了多个领域,包括多线程、网络编程、反射、内存管理、集合框架的深入理解、JVM优化、并发编程、设计模式等。以下将详细介绍这些Java高级应用的知识点。 1. **多线程...
在Java高级应用编程大作业中,我们可以探索一系列深入的Java技术,这些都是大学生在学习Java时可能会遇到的关键概念和实践。这个压缩包包含了“zgl_resource”文件,这可能是一个资源文件夹,通常用于存放课程作业和...
在构建高性能的大型分布式Java应用时,我们面临的是复杂的技术挑战和优化目标。要实现这样的系统,我们需要深入了解Java平台的特点,以及如何利用其优势来处理大规模数据和高并发请求。以下是一些关键的知识点: 1....
2. **线程同步**:为了防止数据竞争,Java提供了多种同步机制,如`synchronized`、`volatile`、`ReentrantLock`等。 3. **线程通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的通信,但它们必须在`...
总结来说,Java中的并发加锁机制非常灵活且强大,通过对`ReentrantLock`和`ReentrantReadWriteLock`等工具的理解和应用,可以有效地解决多线程环境下的并发控制问题。希望本文能帮助读者更好地理解和掌握Java并发...
4. **Java并发编程**:在分布式环境中,线程安全和并发控制尤为重要,Java并发API如synchronized、ReentrantLock、ConcurrentHashMap等是实现的关键。 5. **分布式缓存**:如Redis、Memcached,用于缓解数据库压力...
### 安全编写多线程Java应用程序的关键知识点 #### 一、引言 在现代软件开发中,多线程编程已成为提升程序性能和响应性的关键手段之一。Java作为一种广泛使用的编程语言,提供了丰富的多线程支持。然而,多线程...
ReentrantLock 是 Java 中的一个同步工具类,它实现了 Lock 接口,提供了锁的获取和释放机制。ReentrantLock 的实现原理基于 AQS(AbstractQueuedSynchronizer),是一个重入锁,允许一个线程反复地获取锁而不会出现...
Java的特点使其成为一种广泛应用于各种场景的语言,包括桌面应用、企业级应用、移动应用、网络应用等。它的跨平台能力、安全性、多线程支持以及强大的类库使其成为开发者的首选工具之一。通过深入学习和掌握Core ...
Java线程类应用是Java编程中的重要组成部分,它关乎到多任务处理和程序并发执行的能力。在Java中,线程是程序执行的最小单位,它允许一个程序中有多个执行流同时进行,使得程序能更高效地利用系统资源,特别是在处理...
在Java开发过程中,优化应用程序性能和高效处理数据是至关重要的任务。这关乎到软件的响应速度、资源利用效率以及整体用户体验。"提升你的Java应用性能改善数据处理Java开发Java经验技巧"这一主题涵盖了许多关键的...
Java多线程编程是Java高级应用的重要组成部分,它允许程序同时执行多个任务,提升软件的效率和响应性。本章内容涵盖了多线程的核心概念、实现方式、线程的属性和控制,以及线程同步与通信的问题。 首先,我们要了解...
### Java基础到高级应用知识点概览 #### 一、Java基础知识 - **Java语言特性**: - 面向对象:封装、继承、多态。 - 平台无关性:通过Java虚拟机(JVM)实现了跨平台运行的能力。 - 自动垃圾回收:减少了内存...