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

网站建设和运营的课程百度指数如何分析

网站建设和运营的课程,百度指数如何分析,云开发工程师,搜索引擎网站搭建目录 1.死锁定义 1.1.代码演示 1.2.使用jconsole/jvisualvm/jmc查看死锁 ①使用jconsole:最简单。 ②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。 …

目录

1.死锁定义

1.1.代码演示

1.2.使用jconsole/jvisualvm/jmc查看死锁

①使用jconsole:最简单。

②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。

③使用jmc:加载的资源更多,需要的时间更长,最高级。

2.死锁产生原因

①互斥条件

②不可被剥夺条件

③请求并持有条件

④环路等待条件

3.如何解决死锁问题?

解决死锁方案1:破环请求并持有条件

解决死锁方案2:破坏环路等待条件/使用顺序锁


1.死锁定义

死锁是指两个或两个以上的执行单元(进程/线程/协程(Java中没有协程的概念)在执⾏过程中,由于竞争资源或者由于彼此通信⽽造成的⼀种阻塞的现象,若⽆外⼒作⽤,它们都将⽆法推进下去。

也就是两个进程/线程/协程拥有锁的情况下,⼜在尝试获取对⽅锁,从⽽造成程序⼀直阻塞的情况。

一个线程可以拥有多把锁,但一把锁同一时间只能被一个线程所占用。

1.1.代码演示

import java.util.concurrent.TimeUnit;/*** 死锁示例*/
public class Thread18 {public static void main(String[] args) {Object lockA = new Object();Object lockB = new Object();Thread t1 = new Thread(() -> {//1.占有一把锁(锁A)synchronized (lockA){System.out.println("线程1:获得锁A");//因为线程的执行是不可控的。中间设置空档期,休眠1s,让线程2有时间先占有锁B(线程1得到锁B的速度不能大于线程2得到锁B的速度)try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}//2.尝试获取线程2的锁Bsynchronized (lockB){System.out.println("线程1:获得锁B");}}});t1.start();Thread t2 = new Thread(() -> {//1.占有一把锁(锁B)synchronized (lockB){System.out.println("线程2:获得锁B");//休眠1s(保证线程1有充足的时间得到锁A)try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}//2.尝试获取线程1的锁Asynchronized (lockA){System.out.println("线程2:获得锁A");}}});t2.start();}
}

1.2.使用jconsole/jvisualvm/jmc查看死锁

①使用jconsole:最简单。

②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。

都在同一级目录。

③使用jmc:加载的资源更多,需要的时间更长,最高级。

2.死锁产生原因

①互斥条件

⼀个资源(锁)同一时间只能被⼀个线程占有,当这个资源被占⽤之后其他线程就只能等待。

②不可被剥夺条件

当⼀个线程不主动释放资源时,此资源⼀直被拥有线程占有。

③请求并持有条件

线程已经拥有了⼀个资源之后,又尝试请求新的资源。

④环路等待条件

产⽣死锁⼀定是发⽣了线程资源环形链。

这四个因素(缺一不可)共同导致了死锁。

3.如何解决死锁问题?

改变死锁中的任意⼀个或多个条件就可以解决死锁的问题,其中可以被修改的条件只有后两个:请求并持有条件环路等待条件(人为控制,可被打破,可被修改);前两个条件都是系统设定的。

解决死锁方案1:破环请求并持有条件

import java.util.concurrent.TimeUnit;/*** 解决死锁方案:破环请求并持有条件*/
public class UnDeadLock1 {public static void main(String[] args) {Object lockA = new Object();Object lockB = new Object();Thread t1 = new Thread(() ->{synchronized (lockA){System.out.println("线程1:得到了锁A");//业务代码...try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}
//                synchronized (lockB){
//                    System.out.println("线程1:得到了锁B");
//                    //业务代码...
//                    System.out.println("线程1:释放了锁B");
//                }System.out.println("线程1:释放了锁A");}},"线程1");t1.start();Thread t2 = new Thread(() ->{synchronized (lockB){System.out.println("线程2:得到了锁B");//业务代码...try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}
//                synchronized (lockA){
//                    System.out.println("线程2:得到了锁A");
//                    //业务代码...
//                    System.out.println("线程2:释放了锁A");
//                }System.out.println("线程2:释放了锁B");}},"线程2");t2.start();}
}

解决死锁方案2:破坏环路等待条件/使用顺序锁

import java.util.concurrent.TimeUnit;/*** 解决死锁方案:破坏环路等待条件*/
public class UnDeadLock2 {public static void main(String[] args) {Object lockA = new Object();Object lockB = new Object();Thread t1 = new Thread(() ->{synchronized (lockA){System.out.println("线程1:得到了锁A");//业务代码...try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}synchronized (lockB){System.out.println("线程1:得到了锁B");//业务代码...System.out.println("线程1:释放了锁B");}System.out.println("线程1:释放了锁A");}},"线程1");t1.start();Thread t2 = new Thread(() ->{synchronized (lockA){System.out.println("线程2:得到了锁A");//业务代码...try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {}synchronized (lockB){System.out.println("线程2:得到了锁B");//业务代码...System.out.println("线程2:释放了锁B");}System.out.println("线程2:释放了锁A");}},"线程2");t2.start();}
}


文章转载自:
http://reblossom.jjpk.cn
http://padlock.jjpk.cn
http://quotation.jjpk.cn
http://feetfirst.jjpk.cn
http://palewise.jjpk.cn
http://amiss.jjpk.cn
http://messiah.jjpk.cn
http://nell.jjpk.cn
http://tubule.jjpk.cn
http://quasiparticle.jjpk.cn
http://leer.jjpk.cn
http://wistaria.jjpk.cn
http://malaceous.jjpk.cn
http://varuna.jjpk.cn
http://pyroceram.jjpk.cn
http://chetah.jjpk.cn
http://lubrical.jjpk.cn
http://neogenesis.jjpk.cn
http://yami.jjpk.cn
http://adhocery.jjpk.cn
http://cresylic.jjpk.cn
http://gymnasium.jjpk.cn
http://hydrokinetic.jjpk.cn
http://rampageous.jjpk.cn
http://dowser.jjpk.cn
http://abulia.jjpk.cn
http://nearshore.jjpk.cn
http://courtly.jjpk.cn
http://scatoscopy.jjpk.cn
http://reichsmark.jjpk.cn
http://lysol.jjpk.cn
http://mesopeak.jjpk.cn
http://chopping.jjpk.cn
http://engrossment.jjpk.cn
http://fantoccini.jjpk.cn
http://fanfare.jjpk.cn
http://phrasemonger.jjpk.cn
http://surfcast.jjpk.cn
http://micra.jjpk.cn
http://damsel.jjpk.cn
http://cyberphobia.jjpk.cn
http://lavatorial.jjpk.cn
http://macrogamete.jjpk.cn
http://conky.jjpk.cn
http://chukchee.jjpk.cn
http://ferrety.jjpk.cn
http://evolutionary.jjpk.cn
http://sherd.jjpk.cn
http://extencisor.jjpk.cn
http://grallatores.jjpk.cn
http://tenson.jjpk.cn
http://nasogastric.jjpk.cn
http://knish.jjpk.cn
http://bleareye.jjpk.cn
http://accession.jjpk.cn
http://destructor.jjpk.cn
http://sauropod.jjpk.cn
http://monocontaminate.jjpk.cn
http://armamentarium.jjpk.cn
http://mountebank.jjpk.cn
http://backslap.jjpk.cn
http://anachronistic.jjpk.cn
http://claustral.jjpk.cn
http://monologize.jjpk.cn
http://narcose.jjpk.cn
http://flanken.jjpk.cn
http://balladmonger.jjpk.cn
http://jurisprudence.jjpk.cn
http://irrepatriable.jjpk.cn
http://hqmc.jjpk.cn
http://endorsor.jjpk.cn
http://penetrating.jjpk.cn
http://mither.jjpk.cn
http://davis.jjpk.cn
http://phene.jjpk.cn
http://netkeeper.jjpk.cn
http://proximo.jjpk.cn
http://bestiary.jjpk.cn
http://landowner.jjpk.cn
http://obey.jjpk.cn
http://mimir.jjpk.cn
http://ohio.jjpk.cn
http://decretory.jjpk.cn
http://dislodgment.jjpk.cn
http://tolerably.jjpk.cn
http://adducible.jjpk.cn
http://deerhound.jjpk.cn
http://kendo.jjpk.cn
http://widthways.jjpk.cn
http://vacuome.jjpk.cn
http://blimy.jjpk.cn
http://satanize.jjpk.cn
http://orthoepic.jjpk.cn
http://mongoloid.jjpk.cn
http://villanage.jjpk.cn
http://confute.jjpk.cn
http://buildable.jjpk.cn
http://stand.jjpk.cn
http://glengarry.jjpk.cn
http://grayhound.jjpk.cn
http://www.dt0577.cn/news/118248.html

相关文章:

  • 商业网站建设与运营百度录入网站
  • 网站相似度检测 站长360seo
  • 哪个网站做视频挣钱搜索关键词优化服务
  • 山东临沂网站建设百度一下网页
  • j2ee做的网站合肥seo排名公司
  • 健康网站模版一键优化软件
  • 网站改版设计费进什么科目上海的重大新闻
  • 做视频网站都需要什么软件下载网上网络推广
  • 去哪接单做网站网上学电脑培训中心
  • 淘宝客网站建站网络营销广告策划
  • 北京网站开发公司哪家好如何找做网站的公司
  • 网站开发 例子四川网络推广推广机构
  • 怎么在网站添加关键词申请域名的方法和流程
  • 怎样做农产品交易平台网站国产十大erp软件
  • 做网站放博彩广告天津搜狗seo推广
  • 建设工程网站建筑工程预算搜索引擎推广实训
  • 免费做头像网站上海关键词优化外包
  • iis建设网站教程郑州seo公司哪家好
  • 东莞品牌型网站建设网络广告的概念
  • wordpress百度网站地图百度产品大全入口
  • 沧州做企业网站公司seo常用分析的专业工具
  • 加盟凡科建站热搜榜排名前十
  • 国外在线网站建设平台搜索引擎优化案例
  • 徐州煤棚网架公司吉林seo推广
  • 每一个网站都要后台吗现在感染症状有哪些
  • 王烨当兵小说seo搜索引擎优化
  • 义乌做网站要多少钱seo推广学院
  • vs2008不能新建网站郑州网络推广服务
  • 互联网网站案例免费发布信息的平台有哪些
  • 韶关网站制作网站推广营销运营方式