`
iluoxuan
  • 浏览: 571430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

并发,锁相关

 
阅读更多

多线程是java中一大块,伴随的多线程必然有临界区资源的竞争问题:

 

当多个线程同时访问临界区的时候,就会产生所谓的并发问题:

 

java中处理并发通常最常用的也是技术个人认为:

 

1: 不可变类,  2: synchronied同步字段  3: lock    4:ThreadLocal线程副本 5:并发容器  6: cas操作

7: Semaphore(1)二进制信号量

    1: 不可变类,很简单就是设计线程安全的类,

 

   2: synchronied同步字段

         对方法: public synchronide void add(int l);

         对对象: public void add(int i){

                                synchronized(this){

                                            

                                   }

                       } 

         对类:   publc void add(int i){

                                   synchronized(Test.class){

                               }

                       }

synchronized对当前的线程是可以重入的:

 

 

关于cas操作: 就是比较和更新,然后接合非阻塞算法,

for(;;){

    cas(exp, update);

}

juc中很多并发容器比如 队列等都是采用非阻塞算法实现的,

 

cas操作会产生一个ABA问题

 

 

 

 // 笔记本坏了

 

如何设计高效的锁

 

1: 尽量减少锁的粒度,把计算时间长,io等放到外面

 

2:使用分坼锁和分离锁

    分坼:  对不同的类型业务用不同的锁对象

    分离:  类似ConcurrentHashMap 采用了16个锁,每个所锁住1/16

 

3:使用juc里的容器

 

4:使用cas,原子操作

 

5:活用ThreadLocal

 

6: 采用其他第三方的,memcached, redis等

 

分享到:
评论

相关推荐

    java并发编程实战相关书籍

    如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的...

    SpringBoot 使用 Redis 分布式锁解决并发问题.docx

    但是服务的多副本运行随之也会引来一些分布式问题,比如某个接口的处理逻辑是这样的:接收到请求后,先查询 DB 看是否有相关的数据,如果没有则插入数据,如果有则更新数据。在这种场景下如果相同的 N 个请求并发发...

    并发思维导图Java并发编程的相关概念和知识

    "Java并发思维导图" 这句话表明了一个中心主题,即Java并发编程的相关概念和知识。以下是对这句话的扩充: Java并发编程是Java编程中的一个重要领域,它涉及到多个线程之间的协作和竞争。在Java中,并发编程可以...

    基于springmvc高并发秒杀系统

    其中,对于相关的DAO,Service操作,均添加了Junit单元测试实例。 开发文档 一、业务分析 1.秒杀系统业务流程 2.秒杀业务的核心:库存的处理 3.针对库存业务分析:事务(1>.减内存 2>.记录购买明细) 4.记录...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    详细介绍java并发编程相关知识: 基础知识   并发与并行   Java并发演进历史   Java并发模型   线程模型   存储模型 JVM同步原语 volatile CAS 线程安全   保护“共享数据” 低级并发工具   原子变量   锁...

    如何利用Redis锁解决高并发问题详解

    redis锁处理高并发问题十分常见,下面这篇文章主要给大家介绍了关于如何使用Redis锁解决高并发问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    如何使用Redis锁处理并发问题详解

    主要给大家介绍了关于如何使用Redis锁处理并发问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    GO语言并发编程之互斥锁、读写锁详解

    在本节,我们对Go语言所提供的与锁有关的API进行说明。这包括了互斥锁和读写锁。我们在第6章描述过互斥锁,但却没有提到过读写锁。这两种锁对于传统的并发程序来说都是非常常用和重要的。 一、互斥锁 互斥锁是传统的...

    《Java并发编程的艺术》源代码

    第5章介绍Java并发包中与锁相关的API和组件,以及这些API和组件的使用方式与实现细节。 第6章介绍了Java中的大部分并发容器,并深入剖析其实现原理,让读者领略大师的设计技巧。 第7章介绍了Java中的原子操作类,并...

    实战Java高并发程序设计 .pdf 下载

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 ...

    Java并发编程相关技术使用案例

    1、本资源包含并发编程基础知识的使用案例,包括:线程创建、Synchronized和Reentrantlock锁的使用、线程安全问题演示、Condition的应用、CountDownLatch的应用、Cyclicbarrier的应用、Semaphore的应用、线程池的...

    实战java高并发程序设计.pdf

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 ...

    Java并发Xmind思维导图

    "Java并发思维导图" 这句话表明了一个中心主题,即Java并发编程的相关概念和知识。以下是对这句话的扩充: Java并发编程是Java编程中的一个重要领域,它涉及到多个线程之间的协作和竞争。在Java中,并发编程可以...

    java高并发相关知识点.docx

    Java高并发相关知识点包括: 线程:Java多线程的实现方式,包括继承Thread类和实现Runnable接口。 锁:Java中的锁机制,包括synchronized关键字和ReentrantLock类。 线程池:Java中的线程池机制,包括线程池的创建...

    实战Java高并发程序设计.zip

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 ...

    Java并发编程之重入锁与读写锁

    主要介绍了Java并发编程之重入锁与读写锁,文中相关实例代码详细,测试可用,具有一定参考价值,需要的朋友可以了解下。

    实战Java高并发程序设计.mobi

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。

    实战Java高并发程序设计 中文pdf版下载

    第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。 实战...

    高并发总结

    和并发有关的概念,线程,内存模型,锁的优化,jdk并发包,nio,aio等等

    《Java并发编程实战》

    如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步...

Global site tag (gtag.js) - Google Analytics