`
bcyy
  • 浏览: 1885366 次
文章分类
社区版块
存档分类
最新评论

Java多线程之并发锁

 
阅读更多

这是自JDK5.0开始提供的Java并发包里面的类

下面是关于Java并发锁的测试代码

  1. packagecom.jadyer.thread.lock;
  2. importjava.util.concurrent.locks.Lock;
  3. importjava.util.concurrent.locks.ReentrantLock;
  4. /**
  5. *LockTest
  6. *@author宏宇
  7. *@createMar1,20127:12:04PM
  8. */
  9. publicclassLockTest{
  10. publicstaticvoidmain(String[]args){
  11. FoodCenterfc=newFoodCenter();
  12. newThread(newThreadDog(fc,"Itisdog`sfood")).start();
  13. newThread(newThreadPig(fc,"Itispig`sfood")).start();
  14. }
  15. }
  16. classThreadDogimplementsRunnable{
  17. privateFoodCenterfc;
  18. privateStringfoodname;
  19. publicThreadDog(FoodCenterfc,Stringfoodname){
  20. this.fc=fc;
  21. this.foodname=foodname;
  22. }
  23. @Override
  24. publicvoidrun(){
  25. while(true){
  26. try{
  27. Thread.sleep(1000);
  28. }catch(InterruptedExceptione){
  29. e.printStackTrace();
  30. }
  31. fc.getFood(foodname);
  32. }
  33. }
  34. }
  35. classThreadPigimplementsRunnable{
  36. privateFoodCenterfc;
  37. privateStringfoodname;
  38. publicThreadPig(FoodCenterfc,Stringfoodname){
  39. this.fc=fc;
  40. this.foodname=foodname;
  41. }
  42. @Override
  43. publicvoidrun(){
  44. while(true){
  45. try{
  46. Thread.sleep(2000);
  47. }catch(InterruptedExceptione){
  48. e.printStackTrace();
  49. }
  50. fc.getFood(foodname);
  51. }
  52. }
  53. }
  54. /**
  55. *@see=========================================================================================
  56. *@seejava.util.concurrent是JDK5.0开始提供的Java并发包,其子包locks是专门用于处理线程锁的
  57. *@seejava.util.concurrent.locks.Lock较synchronized关键字比,有一个最大的区别,那就是
  58. *@seeLock可以比synchronized更细粒度的控制锁,体现在try{...}finally{mylock.unlock();}
  59. *@see=========================================================================================
  60. *@seeLock有点像公共厕所的门闩,只有正在使用厕所的人,把门闩打开出来了,其它人才可以使用公厕
  61. *@seeLock比传统线程模型中的synchronized方式更加面向对象。与生活中的锁类似,锁本身也应该是一个对象
  62. *@see两个线程执行的代码片段要实现同步互斥的效果,那么这两个线程所使用的必须是同一个Lock对象
  63. *@see并且,锁应该位于待操作的资源类的内部方法中,而非线程代码中
  64. *@see=========================================================================================
  65. */
  66. classFoodCenter{
  67. Lockmylock=newReentrantLock();//创建一个锁
  68. publicvoidgetFood(Stringname){
  69. intlen=name.length();
  70. mylock.lock();//上锁
  71. try{
  72. for(inti=0;i<len;i++){
  73. System.out.print(name.charAt(i));
  74. }
  75. System.out.println();
  76. }finally{
  77. mylock.unlock();//解锁
  78. }
  79. }
  80. }

下面是关于Java读写锁的测试代码

  1. packagecom.jadyer.thread.lock;
  2. importjava.util.concurrent.locks.ReadWriteLock;
  3. importjava.util.concurrent.locks.ReentrantReadWriteLock;
  4. /**
  5. *Java读写锁
  6. *@see锁分为读锁和写锁。多个读锁不互斥。读锁与写锁互斥。写锁与写锁互斥。这是由JVM自己控制的
  7. *@see如果代码只读数据,可以很多人同时读,但不能同时写,那就上读锁
  8. *@see如果代码修改数据,并且不允许同时读,只能一个人写,那就上写锁
  9. *@see总之:读的时候上读锁,写的时候上写锁
  10. */
  11. publicclassReadWriteLockDemo{
  12. privateObjectmyData=null;//共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据
  13. ReadWriteLockrwl=newReentrantReadWriteLock();
  14. publicvoidget(){
  15. rwl.readLock().lock();//读锁
  16. try{
  17. System.out.println(Thread.currentThread().getName()+"bereadytoreaddata");
  18. Thread.sleep((long)(Math.random()*1000));
  19. System.out.println(Thread.currentThread().getName()+"havereaddata:"+myData);
  20. }catch(InterruptedExceptione){
  21. e.printStackTrace();
  22. }finally{
  23. rwl.readLock().unlock();
  24. }
  25. }
  26. publicvoidput(Objectdata){
  27. rwl.writeLock().lock();//写锁
  28. try{
  29. System.out.println(Thread.currentThread().getName()+"bereadytowritedata");
  30. Thread.sleep((long)(Math.random()*1000));
  31. this.myData=data;
  32. System.out.println(Thread.currentThread().getName()+"havewritedata:"+myData);
  33. }catch(InterruptedExceptione){
  34. e.printStackTrace();
  35. }finally{
  36. rwl.writeLock().unlock();
  37. }
  38. }
  39. }

分享到:
评论

相关推荐

    java多线程之并发锁

    Java 多线程之并发锁 Java 中的多线程编程是指在一个程序中同时运行多个线程,以提高程序的执行效率和响应速度。在多线程编程中,线程间的同步是非常重要的,因为不同的线程可能会同时访问同一个共享资源,导致数据...

    Java 模拟线程并发

    Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    Java多线程与并发库高级应用

    并发库高级应用\多线程\Java

    Java_多线程与并发编程总结.doc

    Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...

    Java多线程高并发篇(一)--重入锁

    在Java多线程高并发编程中,重入锁(ReentrantLock)是一个至关重要的概念,它提供了比Java内置锁(synchronized)更细粒度的控制,并且具有更高的可读性和可扩展性。本篇文章将深入探讨重入锁的相关知识点。 首先...

    java多线程和并发.pdf

    Java多线程与并发编程是Java语言中用于处理多任务执行的关键技术,它能够帮助开发者设计出能够有效应对高并发请求的应用程序。在现代的线上(Online)和离线(Offline)应用中,合理利用多线程技术可以大幅提高系统...

    java多线程并发

    java多线程并发的在新窗口

    java 多线程高并发相关资料收集

    本文将围绕“Java多线程高并发相关资料收集”这一主题,详细探讨这两个领域的核心知识点。 首先,多线程是指在单个程序中同时执行多个线程。Java提供了一个强大的多线程支持,允许开发者创建、管理和控制多个执行...

    笔记_张孝祥_Java多线程与并发库高级应用

    张孝祥Java多线程与并发库高级应用学习笔记,很经典的学习多线程和并发的资料。张孝祥Java多线程讲义笔记由张孝祥亲自整理,很实用的。

    java多线程与高并发视频

    java多线程与高并发java多线程与高并发java多线程与高并发

    Java多线程与并发库高级应用视频教程22集

    资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...

    Java入门到精通视频教程.课件.代码,30套Java开发项目代码,Java多线程与并发库高级应用视频教程,及电子书

    黑马+传智 Java入门到精通视频教程+课件+代码,30套Java开发项目代码,Java多线程与并发库高级应用视频教程,及电子书,面试题,开发工具等

    JAVA多线程并发编程

    但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决这些问题,Java提供了多种同步机制。`synchronized`关键字用于控制对共享资源的访问,确保同一时间只有一个线程可以执行特定代码块,从而避免...

    黑马程序员_张孝祥_Java多线程与并发库 视频+代码+资料

    根据给定文件的信息,我们可以提炼出以下关于Java多线程与并发库的相关知识点: ### Java多线程基础 1. **线程的概念**:在Java中,线程是程序执行流的基本单元。一个标准的Java应用程序至少有一个线程,即主...

    Java 多线程与并发编程总结.doc

    Java多线程与并发编程是Java开发中不可或缺的一部分,它涉及到如何高效地利用CPU资源,实现并发执行多个任务。在操作系统层面,多线程是为了提高系统利用率,使得多个任务能够"同时"执行,但实际上,由于CPU的时钟...

    Java多线程与并发系列22道高频面试题(附思维导图和答案解析)

    Java多线程与并发系列知识点 Java多线程与并发系列知识点...Java多线程与并发系列知识点还包括线程安全、锁机制、并发集合、并发编程的设计模式等多方面的知识点。这些知识点都是Java开发人员需要掌握的重要知识点。

    java多线程查询数据库

    综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。

Global site tag (gtag.js) - Google Analytics