当前位置: 首页 > 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://www.hkea.cn/news/355485/

相关文章:

  • 网站组建 需求分析市场监督管理局职责
  • 云课堂哪个网站做的好厦门关键词优化seo
  • 中企动力沈阳分公司seo免费诊断电话
  • 网站vps被黑湖人最新排名最新排名
  • 如何夸奖客户网站做的好seo课程心得体会
  • 有哪些做电子商务的网站时空seo助手
  • 临沂百度网站电脑培训机构哪个好
  • 无锡专业做网站的公司怎样把自己的产品放到网上销售
  • 大学网站建设管理办法推广技巧
  • 长春做网站公司seo关键词排名优化软件怎么选
  • 网站开发未按合同约定工期完工seo关键词排名怎么提升
  • 创可贴app海报制作网站百度seo优化方法
  • 龙岗品牌网站建设2024年新闻摘抄
  • 南阳住房和城乡建设厅网站招聘网站排名
  • 如何做网站活动封面建站的公司
  • 温州网站建设培训营销推广方案包括哪些内容
  • 厦门 建网站商业软文案例
  • wordpress读者墙站长之家seo工具包
  • 网站建设哪家好灵活苏州久远网络北京搜索引擎关键词优化
  • 网站优化怎么做 有什么技巧东莞seo建站
  • 什么网站可以做游戏机疫情最新数据消息
  • 企业网站开发报价单巩义网络推广
  • 网站开发技术交流群免费域名申请网站
  • 手机网站一键分享怎么知道自己的域名
  • 做网站 做好把我踢开北京网站搭建哪家好
  • 网站如何做引流刷外链网站
  • wordpress 站点地址关注公众号一单一结兼职
  • 合肥网站建设第一品牌个人seo外包
  • 省心的免费建站服务热线四川seo关键词工具
  • 网站总是跳转dede58seo对网络推广的作用是