当前位置:   article > 正文

JUC并发编程与源码分析学习笔记(三)

JUC并发编程与源码分析学习笔记(三)

一百、ThreadLocal之是什么能干嘛

ThreadLocal<T>   该类提供线程局部变量

1、ThreadLocal简介

①、大厂面试题

②、是什么?

③、能干嘛?

④、方法摘要

一百零一、ThreadLocal之案例编码实战

  1. package com.nanjing.juc.tl;
  2. import java.util.Random;
  3. import java.util.concurrent.TimeUnit;
  4. /**
  5. * 需求一: 5个销售卖房子,集团高层只关心销售总量的准确统计数。
  6. *
  7. * 需求二: 5个销售卖完随机数房子,各自独立销售额度,自己业绩按提成走,分灶吃饭,各个销售自己动手,丰衣足食
  8. *
  9. * @author xizheng
  10. * @date 2023-08-21 18:28:26
  11. */
  12. class House{//资源类
  13. int saleCout = 0;
  14. public synchronized void saleHouse(){
  15. ++saleCout;
  16. }
  17. //匿名内部类,繁琐麻烦,推荐使用下面的初始值
  18. // ThreadLocal<Integer> saleVolume = new ThreadLocal<Integer>(){
  19. // @Override
  20. // protected Integer initialValue() {
  21. // return 0;
  22. // }
  23. // };
  24. ThreadLocal<Integer> saleVolume = ThreadLocal.withInitial(() -> 0);
  25. public void saleVolumeByThreadLocal(){
  26. saleVolume.set(1+saleVolume.get());
  27. }
  28. }
  29. public class ThreadLocalDemo {
  30. public static void main(String[] args) {
  31. House house = new House();
  32. for (int i = 1; i <= 5; i++) {
  33. new Thread(() -> {
  34. int size = new Random().nextInt(5)+1;
  35. //System.out.println(size);
  36. try {
  37. for (int j = 0; j < size; j++) {
  38. house.saleHouse();
  39. house.saleVolumeByThreadLocal();
  40. }
  41. System.out.println(Thread.currentThread().getName()+"\t"+"号销售卖出: "+house.saleVolume.get());
  42. } finally {
  43. house.saleVolume.remove();
  44. }
  45. },String.valueOf(i)).start();
  46. }
  47. //暂停毫秒
  48. try {
  49. TimeUnit.MILLISECONDS.sleep(300);
  50. } catch (InterruptedException e) {
  51. e.printStackTrace();
  52. }
  53. System.out.println(Thread.currentThread().getName()+"\t"+"共计,卖出多少套: "+house.saleCout);
  54. }
  55. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/964896
推荐阅读
相关标签
  

闽ICP备14008679号