这个用户很懒,还没有个人简介
私信
主帖 94
回帖
视频
提问
回答
资源
专栏
我们之前说过如何正确创建线程池,我们详细介绍了怎么合理使用线程池,我们也只是介绍了ThreadPoolExecutor的voidexecute(Runnablecommand)方法,利用这个我们可以提交任务,让线程去消费处理,但是没有办法获取任务的执行结果。因为该方法没有返回值。而有一些场景我们需要获取任务的执行结果再判断逻辑。1.FutureTask介绍Java通过ThreadPoolExecutor提供的3个submit()方法和1个FutureTask工具类来支持获得任务执行结果的需求...
2天前 57浏览 0点赞 0回复 0收藏
预计阅读7分钟建议收藏后阅读,转发分享是前进的动力,原创不易在Java语言中创建线程有两种方式,分别是实现Runnable接口或者newThread()就可以了,但是实际上创建线程可不仅是创建对象这么简单。创建对象仅仅是在JVM的堆分配一块内存而已;而创建线程还需要和操作系统内核的API,然后操作系统还要为线程分配一系列资源。涉及内核切换,这个成本就很高。所以线程是一个重量级对象,要避免频繁的创建和销毁。所以问题来了,如何...
2天前 85浏览 0点赞 0回复 0收藏
发号施令CountDownLatch、CyclicBarrier如何让线程听我号令攻打城池,冲鸭......如何让一个线程等待其他线程执行结束再继续执行,且听我一一道来。如何让马拉松比赛运动员分批开跑?1.CountDownLatch计数器在多线程协作完成任务的时候,有时候需要等待其他线程完成任务后,主线程才能继续执行,我们可以使用Thread类的join()方法,让主线程等待被join的线程执行完毕主线程再执行。当然也可以通过线程的消息通信实现,但是今天我...
2天前 61浏览 0点赞 0回复 0收藏
预计阅读所需时间7分钟,建议收藏我们先回顾上一篇ReentrantReadWriteLock读写锁,为什么有了ReentrantReadWriteLock,还要引入StampLock?ReentrantReadWriteLock使得多个读线程同时持有读锁(只要写未被占用),而写锁是独占的。但是很容易造成“饥饿问题”:读线程非常多,写线程很少的情况下,很容易导致写线程“饥饿”StampedLock支持的三种锁模式我们先来看看在使用上StampedLock和上一篇文章讲的ReadWriteLock有哪些区别...
2天前 52浏览 0点赞 0回复 0收藏
1.概述实际工作中我们会遇到一种并发场景:读多写少,这个时候为了优化性能,我们就会使用缓存。针对读多写少这种并发场景,JavaSDK并发包提供了读写锁——ReentrantReadWriteLock,非常容易使用,并且性能很好。通过本文学会如何写出一个缓存组件,以及锁降级是什么?2.什么是读写锁?读写锁遵循以下三个基本原则:允许多个线程同时读共享变量。只允许一个线程写共享变量。如果有一个线程正在执行写操作,此时禁止读线程读共享...
2天前 62浏览 0点赞 0回复 0收藏
Java8带来一大新特性Lambda表达式流(Stream),当流与Lambda表达式结合使用,代码将变得相当骚气与简洁。超级大招,释放代码假如有一个需求,需要对数据库查询的发票信息进行处理:取出金额小于10000的发票。对筛选出来的数据排序。获取排序后的发票销方名称。发票ModelBuilderDatapublicclassInvoiceimplementsSerializable{销方名称privateStringsaleName;是否作废privateBooleancancelFlag;开票金额privateBigDecimalamount...
2天前 66浏览 0点赞 0回复 0收藏
RESTfulAPI最佳实践RESTful是目前最流行的API规范,适用于Web接口规范的设计。让接口易读,且含义清晰。本文将介绍如何设计易于理解和使用的API,并且借助Dockerapi的实践说明。URL设计1.1动词+宾语它的核心思想就是客户端发出的数据操作指令都是「动词+宾语」的结构,比如GETarticles这个命令,GET是动词,articles是宾语。动词通常来说就是五种HTTP方法,对应我们业务接口的CRUD操作。而宾语就是我们要操作的资源,可以理解成...
2天前 184浏览 0点赞 0回复 0收藏
Semaphore:实现一个限流器Semaphore现在普遍翻译成"信号量",从概念上讲信号量维护着一组"凭证",获取到凭证的线程才能访问资源,使用完成后释放,我们可以使用信号量来限制访问特定资源的并发线程数。就像现实生活中的停车场车位,当有空位的时候才能放车子进入,不然就只能等待,出来的车子则释放凭证。信号量模型可以简单的概括为:一个计数器、一个等待队列、三个方法。在信号量模型里,计数器和等待队列对外是透明的,只...
2天前 78浏览 0点赞 0回复 0收藏
模式定义温馨提示:内容较多建议收藏阅读,大约需要5分钟。代码可在GitHub中阅读:欢迎star。https:github.comUniqueDongzerodesignpatterns在常用的23种设计模式中其实面没有委派模式(delegate)的影子,但是在Spring中委派模式确实用的比较多的一种模式,SpringMVC框架中的DispatcherServlet其实就用到了委派模式其实我个人的理解就是一个特殊的静态代理模式,只不过加入了策略模式,我们看下面的图。策略模式的环境上下文角...
2天前 57浏览 0点赞 0回复 0收藏
定义责任链模式(ChainofResponsibilityPattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。用通俗的话就是推卸责任某件事,我们去解决,找到A,结果A踢皮球,说这不关我的事,去找B解决,然后我们就去找B,结果B也说,这跟我没关系,快去找C,就这样,我们就被踢来踢去,这就是责任链模式的思...
2天前 75浏览 0点赞 0回复 0收藏
在吃透Syncchronized原理中介绍了关于Synchronize的实现原理,无论是同步方法还是同步代码块,无论是ACCSYNCHRONIZED还是monitorenter、monitorexit都是基于Monitor实现的,那么这篇来介绍下什么是Monitor。所谓管程:指的是管理共享变量以及对共享变量的操作过程,让它们支持并发。翻译为Java就是管理类的成员变量和成员方法,让这个类是线程安全的。是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥...
2天前 70浏览 0点赞 0回复 0收藏
外观模式(FacadePattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,通过这个接口使得这一个子系统更加容易使用。又称为门面模式,属于对象结构性模式。角色外观模式主要包含如下角色:●Facade(外观角色):统一的高层接口,通过该角色将客户端的请求委托到不同的子系统。●SubSystem(子系统角色):相当于零件,多个零件组合完成一...
2天前 228浏览 0点赞 0回复 0收藏
在操作系统层面,线程也有【生命周期】,这是并发编程的基础我们需要掌握其中生命周期中各个节点的状态转换机制以及持有锁状态。文本将会介绍系统的周期以及在Java编程语言的生命周期区别。打通并发编程任督二脉需要将基本心法牢牢掌握。通用的生命周期可以用如下图所示的“五态模式”来描述,分别为:初始状态、可运行状态、运行状态、休眠状态、终止状态。通用生命周期●初始状态:线程被创建,但是还不允许分配CPU执行,属于...
2天前 41浏览 0点赞 0回复 0收藏
为另一个对象提供代表,以便控制客户对对象的访问。其定义为:为另一个对象提供替身或占位符以访问这个对象。具体地吗可以浏览https:github.comUniqueDongzerodesignpatterns什么是代理官话上讲是一种设计模式,目的是希望代码重用。跟我们以往访问对象的方式不同,代理模式不是直接通过目标对象,而是通过代理访问我们的目标对象以及方法。因为有的时候我们无法直接与目标对象建立联系或者,我们要控制客户端访问。所以便通过...
2天前 59浏览 0点赞 0回复 0收藏
锁的定义:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。竞争的资源可以是:锁、网络连接、磁盘共享变量等一切可以称作是【资源】的东西。我们使用锁来保证线程安全,但是使用不当与滥用可能就会引起死锁。并发程序一旦死锁,一般没有特别好的办法,很多时候只能重启。所以我们一定要比避免死锁。简单例子举个不恰当的例子:现在岳不...
2天前 80浏览 0点赞 0回复 0收藏
允许对象在内部状态改变的时候改变它的行为,对象看起来好像修改了它的类。通俗地说就是把所有行为包装在不同的类状态对象里,每一个状态对象都是抽象状态类的一个子类。认识状态模式所谓对象的状态,通常指的就是对象实例的属性的值;而行为指的就是对象的功能,再具体点说,行为大多可以对应到方法上。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。也就是说,状态和行为是相关联的...
2天前 74浏览 0点赞 0回复 0收藏
设计模式状态模式允许对象在内部状态改变的时候改变它的行为,对象看起来好像修改了它的类。通俗地说就是把所有行为包装在不同的类状态对象里,每一个状态对象都是抽象状态类的一个子类。认识状态模式所谓对象的状态,通常指的就是对象实例的属性的值;而行为指的就是对象的功能,再具体点说,行为大多可以对应到方法上。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。也就是说,状态...
2天前 79浏览 0点赞 0回复 0收藏
我们之前已经说过对象适配器模式,有兴趣的读者可以阅读对象适配器模式。定义适配器模式就是把一个类的接口转换成客户端所期待的另外一种接口,从而使原接口不匹配而无法一起工作的两个类能在一起工作。从功能上说,不兼容的接口都拥有相似或者相同的功能,但是对于客户端期望的接口不兼容,通常我们通过修改该类的接口来解决接口不兼容的问题,但是我们不愿意为了一个功能修改哥哥依赖接口,或者我们压根就没有对象类的源代码...
2天前 46浏览 0点赞 0回复 0收藏
今天我们说说Java8新的时间API,由于之前的api并不理想也存在问题。所以出现了一套全新的日期API,在java.time路径下。LocalDateLocalDate类型包含了年月日信息,下面举些LocalDate的使用示例:LocalDatedateLocalDate.of(2019,4,20);20190704intyeardate.getYear();2019intmonthdate.getMonth().getValue();7intdaydate.getDayOfMonth();4查看该月有多少天intdaysdate.lengthOfMonth();31是否是闰年booleanisLeapdate.isLeapYe...
2天前 45浏览 0点赞 0回复 0收藏
工厂模式介绍工厂模式定义工厂方法(FactoryMethod)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。看下GOF为工厂模式的定义:“Defineaninterfaceforcreatinganobject,butletsubclassesdecidewh...
2天前 77浏览 0点赞 0回复 0收藏
获得成就
已积累 3139 人气
获得 0 个点赞
获得 3 次收藏