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

十大免费跨境电商平台seo是怎么优化

十大免费跨境电商平台,seo是怎么优化,高品质网站欣赏,装修公司企业网站开发规划简单来说, Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类,旅客(线程)分别手持登机牌和身份证接受工作人员的检查,示例代码如所示。…

简单来说, Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。

1.机场过安检

1.1非线程安全

先模拟一个非线程安全的安检口类,旅客(线程)分别手持登机牌和身份证接受工作人员的检查,示例代码如所示。

public class FlightSecurity {private int count = 0;// 登机牌private String boardingPass = "null";// 身份证private String idCard = "null";public void pass(String boardingPass, String idCard) {this.boardingPass = boardingPass;this.idCard = idCard;this.count++;}private void check() {// 简单的测试,当登机牌和身份证首字母不相同时则表示检查不通过if ( boardingPass.charAt(0) != idCard.charAt(0)) throw new RuntimeException("======Exception=====" + toString());}@Overridepublic String toString() {return "FlightSecurity{" +"count=" + count +", boardingPass='" + boardingPass + '\'' +", idCard='" + idCard + '\'' +'}';}
}

Flight Security比较简单, 提供了一个pass方法, 将旅客的登机牌和身份证传递给pass方法, 在pass方法中调用check方法对旅客进行检查, 检查的逻辑也足够的简单, 只需要检测登机牌和身份证首字母是否相等(当然这样在现实中非常不合理,但是为了使测试简单我们约定这么做),我们看代码所示的测试.

public class FlightSecurityTest {// 旅客线程static class Passengers extends Thread {// 机场安检类private final FlightSecurity flightSecurity;// 旅客的身份证private final String idCard;// 旅客的登机牌private final String boardingPass;// 构造旅客是传入身份证,登机牌以及机场安检类public Passengers(FlightSecurity flightSecurity, String idCard, String boardingPass) {this.flightSecurity = flightSecurity;this.idCard = idCard;this.boardingPass  = boardingPass;}@Overridepublic void run() {while(true) {flightSecurity.pass(boardingPass, idCard);}}}public static void main(String[] args) {// 定义三个旅客,身份证和登机牌首字母均相同final FlightSecurity flightSecurity = new FlightSecurity();new Passengers(flightSecurity, "A1234","AF1234").start();new Passengers(flightSecurity, "B1234", "BF1234").start();new Passengers(flightSecurity,"C1234", "CF1234").start();}
}

首字母相同检查不能通过和首字母不相同检查不能通过,为什么会出现这样的情况呢?首字母相同却不能通过?更加奇怪的是传入的参数明明全都是首字母相同的,为什么会出现首字母不相同的错误呢?

1.2 问题分析

(1)首字母相同却未通过检查

图所示的为首字母相同却无法通过安检的分析过程。

2

(2)为何出现首字母不相同的情况

明明传入的身份证和登机牌首字母都相同,可为何在运行的过程中会出现首字母不相同的情况,下面我们也通过图示的方式进行分析,如图所示。

1.3 线程安全

1.1节中出现的问题说到底就是数据同步的问题, 虽然线程传递给pass方法的两个参数能够百分之百地保证首字母相同, 可是在为FlightSecurity中的属性赋值的时候会出现多个线程交错的情况,结合我们在第一部分第4章的所讲内容可知,需要对共享资源增加同步保护,改进代码如下:

    public synchronized void pass(String boardingPass, String idCard) {this.boardingPass = boardingPass;this.idCard = idCard;this.count++;}

何时适合使用single thread execution模式呢?答案如下。

  • 多线程访问资源的时候, 被synchronized同步的方法总是排他性的。
  • 多个线程对某个类的状态发生改变的时候, 比如Flight Security的登机牌以及身份证。

2.吃面问题

2.1吃面引起的死锁

虽然使用synchronized关键字可以保证single thread execution, 但是如果使用不得当则会导致死锁的情况发生,比如A手持刀等待B放下叉,而B手持叉等待A放下刀,示例代码如所示。

public class EatNoodleThread extends Thread {private final String name;// 左手边的餐具private final Tableware leftTool;// 右手边的餐具private final Tableware rightTool;public EatNoodleThread(String name, Tableware leftTool, Tableware rightTool) {this.name = name;this.leftTool = leftTool;this.rightTool = rightTool;}@Overridepublic void run() {while (true) {this.eat();}}// 吃面条的过程private void eat() {synchronized (leftTool) {System.out.println(name + " take up" + leftTool + "left");synchronized (rightTool) {System.out.println(name + "take up " + rightTool + "right");}System.out.println(name + " put down " + leftTool);}}public static void main(String[] args) {Tableware fork = new Tableware("fork");Tableware knife = new Tableware("knife");new EatNoodleThread("A", fork, knife).start();new EatNoodleThread("B", knife, fork).start();}
}

2.2 解决吃面引起的死锁问题

为了解决交叉锁的情况,我们需要将刀叉进行封装,使刀叉同属于一个类中,改进代码如所示

public class EatNoodleThread1 extends Thread{private final String name;private final TablewarePair tablewarePair;public EatNoodleThread1(String name, TablewarePair tablewarePair) {this.name = name;this.tablewarePair = tablewarePair;}@Overridepublic void run() {while(true) {this.eat();}}private void eat() {synchronized (tablewarePair) {System.out.println("eatting");}}}

2.3哲学家吃面问题

哲学家吃面是解释操作系统中多个进程竞争资源的经典问题,每个哲学家的左右手都有吃面用的刀叉,但是不足以同时去使用,比如A哲学家想要吃面,必须拿起左手边的叉和右手边的刀,但是有可能叉和刀都被其他哲学家拿走使用,或者是手持刀等待别人放下叉等容易引起死锁的问题。

http://www.hkea.cn/news/767249/

相关文章:

  • 网站建设商标注册多少类目域名注册免费
  • 哪里有网站设计公司长沙网络公司最新消息
  • 试描述一下网站建设的基本流程百度怎么发布短视频
  • 我现在有域名怎么做网站搜索关键词热度
  • 海外如何 淘宝网站建设快速seo整站优化排行
  • 代还信用卡网站建设赣州seo顾问
  • 响应式网站建设推广开网店
  • 成都专业网站推广公司优化大师优化项目有
  • 怎么用wordpress搭建网站百度关键词排名点
  • 外挂网站模板域名搜索引擎入口
  • 手机网站开发 pdfseo搜索引擎优化工作内容
  • 上海中小网站建设洛阳seo博客
  • 南宁网站建设公司哪家专业搜索引擎优化包括
  • 新疆住房与建设厅网站新产品推广方式有哪些
  • 做网站站怎么赚钱网络营销模式有哪些?
  • 南通城市建设集团有限公司网站南京谷歌推广
  • 南通网站定制方案怎么查找关键词排名
  • 权大师的网站是哪个公司做的百度做个人简介多少钱
  • 烟台网站建设设计软文广告经典案例100字
  • 做微信用什么网站广州百度seo代理
  • 网站建设目标 优帮云跨境电商营销推广
  • 郑州华恩科技做网站怎么样竞价排名适合百度吗
  • flask做大型网站开发深圳seo博客
  • 合肥网站建设平台小程序怎么引流推广
  • 做网站被拘留免费找客源软件
  • 门户型网站建设百度seo快速提升排名
  • 印度做杂质的网站如何进行网络推广
  • 建设厅八大员兴安盟新百度县seo快速排名
  • 南京网站建设索q.479185700小说排行榜百度
  • 幼儿做爰网站seo工程师是什么职业