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

重庆南川网站制作公司哪家好营销推广公司案例

重庆南川网站制作公司哪家好,营销推广公司案例,扬州推广公司,做网站通过什么挣钱​ Callable接口 Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型. 重写 Callable 的 call 方法, 完成累加的过程. 直接通过返回值返…

Callable接口

Callable是一个interface,相当于给线程封装了一个返回值,方便程序猿借助多线程的方式计算结果.

  1. 创建一个匿名内部类, 实现 Callable 接口. Callable 带有泛型参数. 泛型参数表示返回值的类型.

  2. 重写 Callable 的 call 方法, 完成累加的过程. 直接通过返回值返回计算结果.

  3. 把 callable 实例使用 FutureTask 包装一下.

  4. 创建线程, 线程的构造方法传入 FutureTask . 此时新线程就会执行 FutureTask 内部的 Callable 的 call 方法, 完成计算. 计算结果就放到了 FutureTask 对象中.

代码示例: 使用 Callable 版本,创建线程计算 1 + 2 + 3 + … + 1000,

​​​​​​在这里插入图片描述

在上面代码中,get()方法会抛出异常.

理解Callable

  • Callable 和 Runnable 相对, 都是描述一个 “任务”. Callable 描述的是带有返回值的任务, Runnable描述的是不带返回值的任务.
  • Callable 通常需要搭配 FutureTask 来使用. FutureTask 用来保存Callable 的返回结果. 因为Callable 往往是在另一个线程中执行的, 啥时候执行完并不确定.
  • FutureTask就可以负责这个等待结果出来的工作.

ReentrantLock类

可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全.

ReentrantLock的用法
​​​​在这里插入图片描述

ReentrantLock和Synchronized的区别

  1. Synchronized是非公平锁,ReentrantLock默认是非公平锁,但可以通过一个构造方法传入true开启公平锁模式
    在这里插入图片描述

  2. Synchronized不需要手动释放锁,而ReentrantLock需要手动释放锁.

  3. Synchronized提供的加锁操作就是 死等.只要获取不到锁,就会一直阻塞等待.而ReentrantLock提供了更灵活的等待方式.
    在这里插入图片描述

  4. ReentrantLock提供了更强大,更方便的的等待通知机制.
    Synchronized搭配的是wait notify,notify的时候是随机唤醒一个等待线程,而ReentrantLock搭配的是Condition类,进行唤醒的时候可以唤醒指定线程.

  5. ReentrantLock t通常搭配 try catch 使用.

信号量 Semaphore

信号量, 用来表示 “可用资源的个数”. 本质上就是一个计数器.

理解信号量

可以把信号量想象成是停车场的展示牌: 当前有车位 100 个. 表示有 100 个可用资源.
P操作: 当有车开进去的时候, 就相当于申请一个可用资源, 可用车位就 -1 (这个称为信号量的 P 操作)
V操作: 作当有车开出来的时候, 就相当于释放一个可用资源, 可用车位就 +1 (这个称为信号量的 V 操作)
释放资源: 如果计数器的值已经为 0 了, 还尝试申请资源, 就会阻塞等待, 直到有其他线程释放资源.
Semaphore 的 PV 操作中的加减计数器操作都是原子的, 可以在多线程环境下直接使用.
在这里插入图片描述

CountDownLatch

CountDownLatch的主要任务是等待N个任务执行结束

  1. 构造CountDownLatch实例,初始化10代表有10个任务要完成.

​​​​​​​在这里插入图片描述

  1. 每执行完一个任务,都会调用 count.countDown()方法,每调用一次, CountDownLatch内部的计数器就会减1.
  2. 当主线程中使用 latch.await(); 阻塞等待所有任务执行完毕. 相当于计数器为 0 了.

多线程使用哈希表

在之前数据结构学习了哈希表,其中HashMap是线程不安全的,HashTable是线程安全的,
而这里主要讲的是ConcurrentHashMap,是一种更优化的线程安全哈希表.

​​​​​​​在这里插入图片描述

Synchronized加锁是多个线程针对同一个对象加锁,就会产生锁竞争,一个HashTable只有一把锁,此时两个线程在访问哈希表中的任意元素的时候都会发生锁竞争.

在这里插入图片描述

  1. ConcurrentHashMap任然是用synchronized进行加锁,但不是整个锁对象,而是链表的头节点作为所对象,大大降低了锁冲突的概率

  2. ConcurrentHashMap针对读操作不加锁,但使用volatile保证从内存读取元素时原子的,而只针对写操作进行加锁.

  3. ConcurrentHashMap内部充分利用了CAS,进一步削减加锁操作的数目.

  4. 针对扩容采取了化整为零的方式.

  • HashTable/HashMap扩容:创建一个更大的数组,把旧的数组上的链表上的每个元素都搬入到新的数组,相当于删除原来数组在重新插入到新的数组上.这个扩容会在某次put时进行出发,当数据太多,就会导致这种扩容会比较耗时
  • ConcurrentHashMap中,扩容的方式是每次搬运一小部分元素,创建新的数组,旧的数组保留,每次put操作,都忘新数组上添加,同时进行一部分搬运,每次get的时候,旧的数组和新的数组都查询,每次remove只要找到元素删除即可.经过一定时间,所有的元素都搬运完了,最终在释放旧数组.

http://www.pjxw.cn/news/25526.html

相关文章:

  • 玉环做网站济南百度seo
  • 网站是由什么组成的网络营销和推广的方法
  • 重庆九龙坡区网站建设网站优化策略分析
  • 怎么做网站推广世界杯google浏览器官网
  • 要学做游戏上什么网站学好搜索引擎优化主要包括
  • 常州建设网站济南网站优化排名
  • 怎样做网站表白墙百度超级链
  • 歙县建设银行网站网页制作图片
  • 潍坊做网站联系方式seo搜索引擎优化名词解释
  • 高端定制网站设计seo点击工具
  • 手机做网站时时彩赌博今日财经新闻
  • 帮别人做网站制作电脑培训学校哪家好
  • 做网站找个人还是找公司好网络营销策划总结
  • 二级建造师挂靠seo优化6个实用技巧
  • 嘉兴cms建站模板软文范例大全100字
  • idc新人如何做自己的网站个人网站建设
  • 苏州做商城网站网站产品怎么优化
  • 减肥养生网站建设友情链接适用网站
  • 深圳西乡做网站竞价防恶意点击
  • 文秘写作网站seo英文怎么读
  • 西安哪里做网站最大互联网平台有哪些
  • 那个网站做图片好看的排名公式
  • 在哪里找人做公司网站百度惠生活商家怎么入驻
  • 天元建设集团有限公司张琥超seo优化工作有哪些
  • 沈阳商城网站建设兰州关键词快速上首页排名
  • 中国做视频网站有哪些内容宜兴网站建设
  • 设计网站的意义营销型网站建设模板
  • 网站建设视觉效果整合营销包括哪些内容
  • 向客户介绍网站建设的话本百度网址导航
  • 做网站正规公司免费的网站关键词查询工具