关键词搜索

源码搜索 ×
×

Java中使用Atomic*实现原子锁线程安全

发布2019-11-11浏览1351次

详情内容

原子锁类型是JDK Atomic* 相关的类。如AtomicInteger、AtomicLong 等等。

  1. package com.forestar.xht.util;
  2. import java.util.concurrent.atomic.AtomicInteger;
  3. /**
  4. * 原子锁
  5. *
  6. * @author PJL
  7. *
  8. */
  9. public class AtomicLock {
  10. private static AtomicInteger flag = new AtomicInteger(0);
  11. /**
  12. * 获取锁的值
  13. * @return
  14. */
  15. public static int getLockValue() {
  16. return flag.intValue();
  17. }
  18. /**
  19. * 阻塞
  20. */
  21. public static void blockingUntilUnlock() {
  22. while (flag.intValue() == 1) {
  23. try {
  24. Thread.sleep(1);
  25. } catch (InterruptedException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. /**
  31. * 加锁
  32. *
  33. * @return
  34. */
  35. public static int lock() {
  36. blockingUntilUnlock();
  37. if (flag.intValue() == 0) {
  38. return flag.incrementAndGet();
  39. }
  40. return flag.intValue();
  41. }
  42. /**
  43. * 去锁
  44. *
  45. * @return
  46. */
  47. public static int unlock() {
  48. if (flag.intValue() == 1) {
  49. return flag.decrementAndGet();
  50. }
  51. return flag.intValue();
  52. }
  53. public static void main(String[] args) {
  54. for (int i = 1; i <= 10; i++) {
  55. String name = "thread-" + i;
  56. new Thread(() -> {
  57. AtomicLock.lock();
  58. System.out.println(name + "加锁"+" "+" 值 "+AtomicLock.getLockValue());
  59. AtomicLock.unlock();
  60. System.out.println(name + "去锁"+" "+" 值 "+AtomicLock.getLockValue());
  61. }).start();
  62. }
  63. }
  64. }

测试结果:

  1. thread-1加锁 值 1
  2. thread-1去锁 值 0
  3. thread-4加锁 值 1
  4. thread-4去锁 值 0
  5. thread-7加锁 值 1
  6. thread-7去锁 值 0
  7. thread-8加锁 值 1
  8. thread-8去锁 值 0
  9. thread-9加锁 值 1
  10. thread-9去锁 值 0
  11. thread-10加锁 值 1
  12. thread-10去锁 值 0
  13. thread-2加锁 值 1
  14. thread-2去锁 值 0
  15. thread-3加锁 值 1
  16. thread-3去锁 值 0
  17. thread-5加锁 值 1
  18. thread-5去锁 值 0
  19. thread-6加锁 值 1
  20. thread-6去锁 值 0

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载