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

机器配件做外贸上什么网站做百度推广多少钱

机器配件做外贸上什么网站,做百度推广多少钱,精品网站建设费用 在线磐石网络,python 网站开发小项目在工作中#xff0c;我发现很多人在设计之初都是直接按照单线程的思路来写程序的#xff0c;而忽略了本应该重视的并发问题#xff1b;等上线后的某天#xff0c;突然发现诡异的 Bug#xff0c;再历经千辛万苦终于定位到问题所在#xff0c;却发现对于如何解决已经没有了…在工作中我发现很多人在设计之初都是直接按照单线程的思路来写程序的而忽略了本应该重视的并发问题等上线后的某天突然发现诡异的 Bug再历经千辛万苦终于定位到问题所在却发现对于如何解决已经没有了思路。 关于这个问题我觉得咱们今天很有必要好好聊聊“如何用面向对象思想写好并发程序”这个话题。 面向对象思想与并发编程有关系吗本来是没关系的它们分属两个不同的领域但是在 Java 语言里这两个领域被无情地融合在一起了好在融合的效果还是不错的在 Java 语言里面向对象思想能够让并发编程变得更简单。 那如何才能用面向对象思想写好并发程序呢结合我自己的工作经验来看我觉得你可以从封装共享变量、识别共享变量间的约束条件和制定并发访问策略这三个方面下手。 一、封装共享变量 并发程序我们关注的一个核心问题不过是解决多线程同时访问共享变量的问题。 面向对象思想里面有一个很重要的特性是封装封装的通俗解释就是将属性和实现细节封装在对象内部外界对象只能通过目标对象提供的公共方法来间接访问这些内部属性这和门票管理模型匹配度相当的高球场里的座位就是对象属性球场入口就是对象的公共方法。我们把共享变量作为对象的属性那对于共享变量的访问路径就是对象的公共方法所有入口都要安排检票程序就相当于我们前面提到的并发访问策略。 利用面向对象思想写并发程序的思路其实就这么简单将共享变量作为对象属性封装在内部对所有公共方法制定并发访问策略。 就拿很多统计程序都要用到计数器来说下面的计数器程序共享变量只有一个就是 value我们把它作为 Counter 类的属性并且将两个公共方法 get() 和 addOne() 声明为同步方法这样 Counter 类就成为一个线程安全的类了。 public class Counter {private long value;synchronized long get(){return value;}synchronized long addOne(){return value;} }当然实际工作中很多的场景都不会像计数器这么简单经常要面临的情况往往是有很多的共享变量例如信用卡账户有卡号、姓名、身份证、信用额度、已出账单、未出账单等很多共享变量。这么多的共享变量如果每一个都考虑它的并发安全问题那我们就累死了。但其实仔细观察你会发现很多共享变量的值是不会变的例如信用卡账户的卡号、姓名、身份证。对于这些不会发生变化的共享变量建议你用 final 关键字来修饰。 这样既能避免并发问题也能很明了地表明你的设计意图让后面接手你程序的兄弟知道你已经考虑过这些共享变量的并发安全问题了。 二、识别共享变量间的约束条件 识别共享变量间的约束条件非常重要。因为这些约束条件决定了并发访问策略。 例如库存管理里面有个合理库存的概念库存量不能太高也不能太低它有一个上限和一个下限。关于这些约束条件我们可以用下面的程序来模拟一下。在类 SafeWM 中声明了两个成员变量 upper 和 lower分别代表库存上限和库存下限这两个变量用了 AtomicLong 这个原子类原子类是线程安全的所以这两个成员变量的 set 方法就不需要同步了。 public class SafeWM {// 库存上限private final AtomicLong upper new AtomicLong(0);// 库存下限private final AtomicLong lower new AtomicLong(0);// 设置库存上限void setUpper(long v){upper.set(v);}// 设置库存下限void setLower(long v){lower.set(v);}// 省略其他业务代码 }虽说上面的代码是没有问题的但是忽视了一个约束条件就是库存下限要小于库存上限这个约束条件能够直接加到上面的 set 方法上吗我们先直接加一下看看效果如下面代码所示。我们在 setUpper() 和 setLower() 中增加了参数校验这乍看上去好像是对的但其实存在并发问题问题在于存在竞态条件。这里我顺便插一句其实当你看到代码里出现 if 语句的时候就应该立刻意识到可能存在竞态条件。 我们假设库存的下限和上限分别是 (2,10)线程 A 调用 setUpper(5) 将上限设置为 5线程 B 调用 setLower(7) 将下限设置为 7如果线程 A 和线程 B 完全同时执行你会发现线程 A 能够通过参数校验因为这个时候下限还没有被线程 B 设置还是 2而 52线程 B 也能够通过参数校验因为这个时候上限还没有被线程 A 设置还是 10而 710。当线程 A 和线程 B 都通过参数校验后就把库存的下限和上限设置成 (7, 5) 了显然此时的结果是不符合库存下限要小于库存上限这个约束条件的。 public class SafeWM {// 库存上限private final AtomicLong upper new AtomicLong(0);// 库存下限private final AtomicLong lower new AtomicLong(0);// 设置库存上限void setUpper(long v){// 检查参数合法性if (v lower.get()) {throw new IllegalArgumentException();}upper.set(v);}// 设置库存下限void setLower(long v){// 检查参数合法性if (v upper.get()) {throw new IllegalArgumentException();}lower.set(v);}// 省略其他业务代码 }在没有识别出库存下限要小于库存上限这个约束条件之前我们制定的并发访问策略是利用原子类但是这个策略完全不能保证库存下限要小于库存上限这个约束条件。所以说在设计阶段我们一定要识别出所有共享变量之间的约束条件如果约束条件识别不足很可能导致制定的并发访问策略南辕北辙。 共享变量之间的约束条件反映在代码里基本上都会有 if 语句所以一定要特别注意竞态条件。 三、制定并发访问策略 制定并发访问策略是一个非常复杂的事情。应该说整个专栏都是在尝试搞定它。不过从方案上来看无外乎就是以下“三件事”。 避免共享避免共享的技术主要是利于线程本地存储以及为每个任务分配独立的线程。不变模式这个在 Java 领域应用的很少但在其他领域却有着广泛的应用例如 Actor 模式、CSP 模式以及函数式编程的基础都是不变模式。管程及其他同步工具Java 领域万能的解决方案是管程但是对于很多特定场景使用 Java 并发包提供的读写锁、并发容器等同步工具会更好。 接下来在咱们专栏的第二模块我会仔细讲解 Java 并发工具类以及他们的应用场景在第三模块我还会讲解并发编程的设计模式这些都是和制定并发访问策略有关的。 除了这些方案之外还有一些宏观的原则需要你了解。这些宏观原则有助于你写出“健壮”的并发程序。这些原则主要有以下三条。 优先使用成熟的工具类Java SDK 并发包里提供了丰富的工具类基本上能满足你日常的需要建议你熟悉它们用好它们而不是自己再“发明轮子”毕竟并发工具类不是随随便便就能发明成功的。迫不得已时才使用低级的同步原语低级的同步原语主要指的是 synchronized、Lock、Semaphore 等这些虽然感觉简单但实际上并没那么简单一定要小心使用。避免过早优化安全第一并发程序首先要保证安全出现性能瓶颈后再优化。在设计期和开发期很多人经常会情不自禁地预估性能的瓶颈并对此实施优化但残酷的现实却是性能瓶颈不是你想预估就能预估的。 总结 写在最后 很多人感叹“学习无用”实际上之所以产生无用论是因为自己想要的与自己所学的匹配不上这也就意味着自己学得远远不够。无论是学习还是工作都应该有主动性所以如果拥有大厂梦那么就要自己努力去实现它。 以上学习资料均免费放送最后祝愿各位身体健康顺利拿到心仪的offer 由于文章的篇幅有限所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里 资料获取方式点赞评论我的文章关注我然后戳这里即可免费领取 CuqNXO-1623614570590)] [外链图片转存中…(img-dlpWA0LK-1623614570592)] [外链图片转存中…(img-mswpUISq-1623614570593)]
http://www.pierceye.com/news/943948/

相关文章:

  • 国外网站seo国外企业网站建设
  • 很简单的做设计的网站网站建设会议讲话
  • 泉港区建设局网站廉政配置wordpress环境
  • 公众号开发培训网站谷歌优化怎么做
  • 网站设计合理汕头市潮南区紧急提醒
  • 国外网站流量查询企业网站报价单
  • 聊城高唐网站建设公司wordpress设置域名
  • 有帮忙做儿童房设计的网站吗东莞横沥网站制作
  • 国外网站模板欣赏WordPress 编辑器修改默认字号
  • 厦门同安网站建设视频购物网站开发方案
  • 什么是建设网站的主题兼职做问卷调查的网站
  • 装饰网站建设软件下载公司旅游视频网站模板免费下载
  • aws网站建设个体户做网站去哪里做
  • 用四字成语做网站域名好吗宁波网站推广专业服务
  • 深圳网站建设公司是网络推广网上营销
  • 网站视频站建设教程和仿qq商城版淘宝客网站源码模板+带程序后台文章dede织梦企业程序
  • 温州红酒网站建设长沙移动网站建设
  • 如何制作网站?企业网站制作步骤
  • 桓台县旅游网站建设购物网站建设技术难点
  • 单页网站推广网站qq链接怎么做
  • wordpress仿站步骤平乡网站建设
  • 青岛高端网站建设公司新网站seo技术
  • 手机网站后台甘肃网络推广技巧
  • 做co网站阿里云建站方案
  • 如何做网站首页优化怎么查网站点击量
  • 北京网站制作百度推广潜江资讯网二手房出售
  • 北京建网站软件深圳企业网站
  • 网站关键词互点备案网站简介怎么写
  • 网站建设报告书范文哈尔滨网站公司哪家好
  • 景观毕业设计作品网站公司网站销售平台建设费分录