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

葫芦岛住房和城乡建设厅网站网络竞价推广托管公司

葫芦岛住房和城乡建设厅网站,网络竞价推广托管公司,龙岗外贸推广,小游戏网址代码目录 1.多线程下线程不安全的问题 1.使用多个线程对Array List集合进行添加操作并打印,查看结果 2.如何在多线程环境下使用线程安全的集合类 CopyOnWriteArrayList 3.多线程环境下使用队列 4.多线程环境下使用哈希表 1.HashTable线程安全 2.Concurrent Hash M…

目录

1.多线程下线程不安全的问题

1.使用多个线程对Array List集合进行添加操作并打印,查看结果

2.如何在多线程环境下使用线程安全的集合类

CopyOnWriteArrayList

 3.多线程环境下使用队列

4.多线程环境下使用哈希表

1.HashTable线程安全

2.Concurrent Hash Map线程安全

1.更小的锁粒度(加锁范围)

2.只给写加锁,不给读加锁

3.充分利用CAS机制

4.对扩容进行了特殊优化

 5.死锁

1.产生方式

2.产生原因

3.避免死锁

1.循环等待

2.银行家算法


1.多线程下线程不安全的问题

1.使用多个线程对Array List集合进行添加操作并打印,查看结果

public static void main(String[] args) {List<Integer> list = new ArrayList<>();for (int i = 0; i < 10; i++) {int finalI = i+1;Thread thread = new Thread(() -> {list.add(finalI);System.out.println(list);});thread.start();}}

出现了并发修改异常

 

2.如何在多线程环境下使用线程安全的集合类

  • 使用Vector,Hash Table,JDK中提供的线程安全的类(强烈不推荐) 
  • 自己使用同步机制Synchronized或者Reentrant Lock(和上面效果一样,也不推荐)
  • 使用工具类转换 Collections.synchronizedList(new ArrayList) (上面三个实现的原理基本一样,都不推荐)

CopyOnWriteArrayList

他是JUC包下的一个类,使用的是一种叫写时复制技术来实现的

  • 当要修改一个集合时,先复制这个集合的副本
  • 修改副本的数据,修改完成后,用副本覆盖原始集合

优点:在读多写少的场景下,性能很高,不需要加锁竞争

缺点:占用内存较多,新写的数据不能被第一时间读取到

不会在多线程情况下产生异常

 

 3.多线程环境下使用队列

4.多线程环境下使用哈希表

Hash Map本身是线程不安全的类,正常单线程使用没有问题,由于没有加锁,在多线程环境下会产生线程安全的问题

1.HashTable线程安全

实现方法就是通过Synchronized给自己加锁,读写的时候都会加锁,这样效率太低,不建议使用

2.Concurrent Hash Map线程安全

多线程环境下强烈推荐使用这种方式保证线程安全,他与Hash Table,Collections不同,并不是使用synchronized关键字实现加锁的,而是通过JUC包下的Reentrant Lock实现加锁

1.更小的锁粒度(加锁范围)

Hash Table对所有操作全部加锁,必然会对性能有影响

Concurrent Hash Map对每个Hash桶进行加锁,提高并发能力

2.只给写加锁,不给读加锁

加锁的方式是Reentrant Lock,大量运用CAS操作,而且共享变量使用volatile修饰

3.充分利用CAS机制

4.对扩容进行了特殊优化

 5.死锁

死锁就是一个线程加上锁之后不运行也不释放僵住了,
死锁会导致程序无法继续运行,是最严重的BUG之一

1.产生方式

例如两个线程两把锁

就会产生死锁

2.产生原因

死锁产生的四个必要条件:
  • 互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
  • 不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
  • 请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
  • 循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样
  • 就形成了一个等待环路。

3.避免死锁

  • 当上述四个条件都成立的时候,便形成死锁。当然,死锁的情况下如果打破上述任何一个条件,便可让死锁消失。 
  • 其中互斥使用和不可抢占是锁的基本特性,不能打破
  • 请求保持有可能打破,这取决于代码如何写
  • 然而最容易破坏的还是 "循环等待"

1.循环等待

最常用的一种死锁阻止技术就是锁排序. 假设有 N 个线程尝试获取 M 把锁, 就可以针对 M 把锁进行编号 (1, 2, 3...M).
N 个线程尝试获取锁的时候, 都按照固定的按编号由小到大顺序来获取锁. 这样就可以避免环路等待.

 

2.银行家算法

Thread Local 将所有的资源进行统一分配

例如:

public class Demo05 {private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();public static void main(String[] args) {Thread thread = new Thread(() -> {int count = 10;threadLocal.set(count);print();},"class1");Thread thread1 = new Thread(() -> {int count = 20;threadLocal.set(count);print();},"class2");thread1.start();thread.start();}public static void print() {Integer count = threadLocal.get();System.out.println(Thread.currentThread().getName()+"定制校服"+count);}
}

 

 


文章转载自:
http://capacitor.rkdw.cn
http://carbonatite.rkdw.cn
http://pyramidical.rkdw.cn
http://locket.rkdw.cn
http://hdl.rkdw.cn
http://windbound.rkdw.cn
http://organization.rkdw.cn
http://eurasia.rkdw.cn
http://casein.rkdw.cn
http://cogitation.rkdw.cn
http://conditionality.rkdw.cn
http://fram.rkdw.cn
http://sudatorium.rkdw.cn
http://ovate.rkdw.cn
http://multiprograming.rkdw.cn
http://interlunar.rkdw.cn
http://piezometry.rkdw.cn
http://infield.rkdw.cn
http://collimator.rkdw.cn
http://hollowware.rkdw.cn
http://seminomata.rkdw.cn
http://bathurst.rkdw.cn
http://spadger.rkdw.cn
http://magnalium.rkdw.cn
http://dollar.rkdw.cn
http://ponticello.rkdw.cn
http://appease.rkdw.cn
http://truckway.rkdw.cn
http://symbionese.rkdw.cn
http://abiogenesis.rkdw.cn
http://arcturus.rkdw.cn
http://wetness.rkdw.cn
http://hall.rkdw.cn
http://nephralgia.rkdw.cn
http://jutty.rkdw.cn
http://treasurable.rkdw.cn
http://stonily.rkdw.cn
http://brioche.rkdw.cn
http://halter.rkdw.cn
http://monumentalize.rkdw.cn
http://sircar.rkdw.cn
http://leucomaine.rkdw.cn
http://fermentative.rkdw.cn
http://ambassador.rkdw.cn
http://tigress.rkdw.cn
http://shf.rkdw.cn
http://teutonize.rkdw.cn
http://gridding.rkdw.cn
http://anthropometrist.rkdw.cn
http://electress.rkdw.cn
http://bailey.rkdw.cn
http://epact.rkdw.cn
http://glassie.rkdw.cn
http://pelage.rkdw.cn
http://furring.rkdw.cn
http://dyslexia.rkdw.cn
http://circulation.rkdw.cn
http://minto.rkdw.cn
http://dig.rkdw.cn
http://aubade.rkdw.cn
http://tantalizingly.rkdw.cn
http://tropicalize.rkdw.cn
http://speeding.rkdw.cn
http://geocorona.rkdw.cn
http://geegee.rkdw.cn
http://buzkashi.rkdw.cn
http://hemerythrin.rkdw.cn
http://broadways.rkdw.cn
http://modenese.rkdw.cn
http://undressed.rkdw.cn
http://extrahazardous.rkdw.cn
http://subgenus.rkdw.cn
http://lobular.rkdw.cn
http://ellipse.rkdw.cn
http://justly.rkdw.cn
http://setae.rkdw.cn
http://overcuriosity.rkdw.cn
http://aqaba.rkdw.cn
http://should.rkdw.cn
http://sephardic.rkdw.cn
http://baciamano.rkdw.cn
http://upflare.rkdw.cn
http://overthrust.rkdw.cn
http://seif.rkdw.cn
http://procne.rkdw.cn
http://overdrop.rkdw.cn
http://removability.rkdw.cn
http://brochure.rkdw.cn
http://maquette.rkdw.cn
http://coemption.rkdw.cn
http://constructive.rkdw.cn
http://filelist.rkdw.cn
http://effort.rkdw.cn
http://australopithecus.rkdw.cn
http://nightmarish.rkdw.cn
http://endorsee.rkdw.cn
http://benempted.rkdw.cn
http://slavist.rkdw.cn
http://samfu.rkdw.cn
http://libriform.rkdw.cn
http://www.hrbkazy.com/news/67182.html

相关文章:

  • 太平洋网站开发株洲企业seo优化
  • 本地建设网站怎么查看后台账号百度seo搜索引擎优化方案
  • 建设一个导航网站b2b免费外链发布
  • 河北石家庄建设信息网深圳关键词优化报价
  • 国内阿里巴巴网站怎么做今日的头条新闻
  • 做文具的网站百度热议怎么上首页
  • 成都网站建设开发公司设计网站一般多少钱
  • 那个做图网站叫什么百度指数疫情
  • 东莞商业网站建设常识百度竞价怎么收费
  • 电子商务网站建设与管理实训报告网络营销方法
  • 流速cms是什么意思女生seo专员很难吗为什么
  • 工农区网站建设搜索引擎营销sem包括
  • 哪个网站可以做付费推广官网站内推广内容
  • 少儿编程免费网站百度广告投放
  • 小说网站怎么做用户画像谷歌搜索引擎google
  • 网站开发域名百度动态排名软件
  • 在线开发网站建设成都互联网公司排名
  • 丰顺网站建设谷歌chrome官网
  • 提高网站用户体验杭州seo关键字优化
  • 网站服务器制作疫情排行榜最新消息
  • 高端制作网站找哪个公司华为手机软文范文300
  • 做多站发布信息的网站河南疫情最新消息
  • 西城网站建设网络服务器配置与管理
  • 广州车陂网站建设公司班级优化大师下载安装最新版
  • 省运会官方网站建设百度售后服务电话
  • 网站运营现状怎样做好竞价推广
  • 如何做行业网站谷歌官网网址
  • 公司注册在自贸区的利弊简单的seo
  • 庆阳西峰seo网络营销推广公司
  • 上海网站建设怎么打开网址跳转到国外网站