当前位置: 首页 > news >正文

祁阳做网站wordpress搭建邮箱

祁阳做网站,wordpress搭建邮箱,网络服务列表中选择iphone,深圳网深圳网站开发公司问题描述 我们在使用threadLocal的时#xff0c;使用ThreadLocal.withInitial去初始化而不是使用new ThradLocal去初始化#xff0c;这是为什么呢#xff1f; 问题例子 比如说#xff0c;假设我们想要在每个线程中维护一个独立的计数器 import java.util.concurrent.at…问题描述 我们在使用threadLocal的时使用ThreadLocal.withInitial去初始化而不是使用new ThradLocal去初始化这是为什么呢 问题例子 比如说假设我们想要在每个线程中维护一个独立的计数器 import java.util.concurrent.atomic.AtomicInteger;public class ThreadLocalExample {import java.util.concurrent.atomic.AtomicInteger;public class ThreadLocalExample {private static final ThreadLocalAtomicInteger counterThreadLocal new ThreadLocal();public static void main(String[] args) {// 创建多个线程for (int i 0; i 5; i) {new Thread(() - {// 获取 ThreadLocal 变量并递增计数器int count counterThreadLocal.get().getAndIncrement();System.out.println(线程 Thread.currentThread().getId() 计数: count);}).start();}} }这个程序实际会报错 首先要说明一下这个代码并不是实现多线程的累加 import java.util.concurrent.atomic.AtomicInteger;public class MultiThreadedIncrement {private static final AtomicInteger counter new AtomicInteger(0);public static void main(String[] args) {// 创建多个线程进行累加for (int i 0; i 5; i) {new Thread(() - {// 在多线程环境下使用AtomicInteger进行累加for (int j 0; j 10000; j) {counter.incrementAndGet();}}).start();}// 等待所有线程执行完毕try {Thread.sleep(1000); // 这里仅为示例实际使用中可能需要更精确的等待方式} catch (InterruptedException e) {e.printStackTrace();}// 输出最终累加结果System.out.println(累加结果: counter.get());} }多线程的累加是这样的一定要注意。而本案例是想实现每个线程独立维护一个计数器互不干涉。 或者我们这样来写大家可以看的更清楚 import java.util.concurrent.atomic.AtomicInteger; public class ThreadLocalIncrement {private static final ThreadLocalAtomicInteger threadLocalCounter ThreadLocal.withInitial(AtomicInteger::new);public static void main(String[] args) {// 创建多个线程进行递增for (int i 0; i 5; i) {new Thread(() - {// 获取当前线程的计数器AtomicInteger counter threadLocalCounter.get();// 在每个线程中递增计数器for (int j 0; j 10000; j) {counter.incrementAndGet();System.out.println(线程 Thread.currentThread().getId() 计数: counter.get());}}).start();}} }我们知道thread底层是基于treadmap实现的 ThreadLocal 使用了一个名为 ThreadLocalMap 的内部类它是 Thread 类的一个字段。 每个线程都有自己的 ThreadLocalMap 实例它是一个自定义的散列表结构。在 ThreadLocalMap 中ThreadLocal 实例作为键与之关联的值则存储在相应的槽位中。每个 ThreadLocal 实例在自己所属线程的 ThreadLocalMap 中有一个条目。 当你调用 ThreadLocal 的 get 方法时实际上是在当前线程的 ThreadLocalMap 中查找与该 ThreadLocal 实例关联的值。而调用 set 方法则是在当前线程的 ThreadLocalMap 中设置对应的关联值。 这种设计的好处在于每个线程都有自己独立的存储空间不需要锁定或同步从而提高了并发性能。 总体来说虽然底层并不直接使用标准的 Map 实现但可以将 ThreadLocalMap 看作是一个简化版的散列表 解决 我们可以简单理解为这就是一个mapkey就是每个线程的threadLacle实例value就是要存的值 实际上每个线程在开始执行时实例化threadLocal并没有初始化值而是一开始threalLocal的值就是null,所以在执行get方法的时候实际上取得是一个null值。所以null.getAndIncrement()自然会报错 我们可以这样修改 import java.util.concurrent.atomic.AtomicInteger;public class ThreadLocalExample {private static final ThreadLocalAtomicInteger counterThreadLocal new ThreadLocal();public static void main(String[] args) {// 创建多个线程for (int i 0; i 5; i) {new Thread(() - {// 检查 ThreadLocal 变量是否为 null如果为 null则设置初始值if (counterThreadLocal.get() null) {counterThreadLocal.set(new AtomicInteger());}// 获取 ThreadLocal 变量并递增计数器int count counterThreadLocal.get().getAndIncrement();System.out.println(线程 Thread.currentThread().getId() 计数: count);}).start();}} } 或者我们也可以使用ThreadLocal.withInitial来避免这个问题 import java.util.concurrent.atomic.AtomicInteger;public class ThreadLocalExample {private static final ThreadLocalAtomicInteger counterThreadLocal ThreadLocal.withInitial(AtomicInteger::new);public static void main(String[] args) {// 创建多个线程for (int i 0; i 5; i) {new Thread(() - {// 获取 ThreadLocal 变量并递增计数器int count counterThreadLocal.get().getAndIncrement();System.out.println(线程 Thread.currentThread().getId() 计数: count);}).start();}} }总结 在上述例子中counterThreadLocal 是一个 ThreadLocal 变量初始值是一个 AtomicInteger 计数器。每个线程第一次访问 counterThreadLocal 时都会调用 AtomicInteger::new 获取一个新的 AtomicInteger 实例作为初始值。每个线程都有自己独立的计数器互不干扰。 如果我们使用 new ThreadLocal(); 创建 ThreadLocal 实例它的初始值将为 null。这样每个线程第一次访问 ThreadLocal 变量时都会得到 null。这可能需要额外的逻辑来处理初始值增加了出错的可能性。所以使用 ThreadLocal.withInitial 提供了一种更清晰和线程安全的方式来初始化 ThreadLocal 变量。
http://www.sadfv.cn/news/80711/

相关文章:

  • 做cover用什么网站广州小企业网站制作
  • 学校网站开发方案模板网站域名备案证书
  • 512内存服务器做网站能自己做的ppt网站
  • 做模型的网站有哪些内容wordpress自建主题
  • 免费授权企业网站源码潍坊百度seo公司
  • 重庆点优定制网站建设中山seo关键词
  • 世安建设集团有限公司网站温州本地论坛
  • 做关于什么内容的网站国外黄土网站
  • 潮州+网站建设做网站有高手没有
  • 请勿直接解析到ip否则我司不能保证您的网站能正常运行!"制作网站难不难
  • win7 iis架设网站建的网站403
  • 品牌网站建设要多少钱手机制作app需要什么软件
  • 上海网站制作福州wordpress制作自定义页面的方法
  • 莱芜找工作网站网站百度推广和优化
  • 手机网站建立教程网站后台信息发布这样做
  • 桂林市生活网官方网站房地产推广策略
  • 小网站推荐电商网站建设基本流程图
  • 西樵网站开发中信建设有限责任公司陈晓佳简历
  • 东莞大型网站建设成都建设网站哪家好
  • 贸易网站怎么做电子商务网站建设管理论文
  • 建站是什么意思网站视频是什么软件做的
  • 购物网站开发中查看订单的实现逻辑美食网站建设实施方案
  • 两学一做的做题网站是多少vs2012 建网站
  • 济南正规网站建设公司手机网站图片切换
  • 北京网站设计定制开发建设公司泰顺网站建设
  • 电子商务网站平台有哪些网站建设分金手指排名十二
  • 建站点怎么做网站前端做网站维护
  • 临安区规划建设局网站网站建设基础书本
  • 门户网站开发 论文企业邮箱登录入口126
  • 陕西省建设厅网站劳保统筹基金华为软件开发工程师月薪多少