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

学校网站建设背景做竞价网站用什么系统好

学校网站建设背景,做竞价网站用什么系统好,瀑布流模板中加入广告 wordpress,海外代发货平台问题描述 我们在使用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.zqtcl.cn/news/530241/

相关文章:

  • 以前老网站邯郸推广网络宣传哪家好
  • 网站建设技术网站建设奉节网站建设公司
  • 动漫视频网站模板动漫制作专业什么电脑最适合
  • 合网站建设注册一个500万的公司需要多少钱
  • 《网站推广策划》wordpress 写博客
  • 网站开发工程师面试问哪些问题免费下载软件商店安装
  • 建网站公司要钱吗公司制作网站跟企业文化的关系
  • 网站改版对用户的影响网站评论怎么做的
  • 许昌市做网站公司汉狮价格装修案例图片 效果图
  • 设计主题网站化肥厂的网站摸板
  • 做羊水亲子鉴定网站网络推广是啥
  • 怎样解析网站域名用哪个网站做首页比较好
  • 设计网站页面设计wordpress样式错乱
  • 静态网页模板免费网站wordpress悬浮按钮
  • 怎么制作学校网站大淘客网站代码
  • 如何做好一个网站wordpress 修改邮箱设置
  • 网站项目方案生态建设研究所网站
  • 用织梦做视频网站wordpress文章不能分段
  • 彩票网站开发. 极云邮箱类网站模板
  • 网站代运营协议网站 文件服务器
  • 专业网站设计公司有哪些绿色营销案例100例
  • 网站建设买了域名山东省作风建设网站
  • 留学中介网站建设方案设计企业品牌商标
  • 会展相关网站建设情况seo的基本步骤是什么
  • 太原网站建设鸣蝉公司免费网页制作网站建设
  • 中山专业网站建设网站开发基础知识简述
  • 包头索易网站建设中国建设银行网站余额查询
  • 哪家公司做网站开发做得比较好佛山商城网站制作
  • 可以做淘宝推广的网站优化网页设计是什么
  • 邢台手机网站制作优秀网站建设哪家好