
读书笔记
ruijiao_ren
这个作者很懒,什么都没留下…
展开
-
多线程学习(三)——控制线程
Java里提供了一些工具方法,通过这些方法可以很好地控制线程得执行。1、join线程 Thread提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。2、后台控制线程 有一种线程,他是再后台运行的,它的任务时为其他的线程提供服务,这种县城...原创 2018-02-27 22:19:29 · 211 阅读 · 0 评论 -
设计模式学习——桥接模式(Bridge)
在面向对象设计中,很多情况下使用继承会带来麻烦,比如:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系以至于父类实现中的任何变化必然会导致子类 发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。所以在面向对象设计中,还有一个很重要的设...原创 2018-03-05 22:49:58 · 258 阅读 · 0 评论 -
设计模式学习——适配器模式(Adapter)
一、什么是适配器模式适配器模式:将一个类接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 在软件开发中,系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功...原创 2018-03-04 21:11:46 · 257 阅读 · 1 评论 -
设计模式学习——代理模式(proxy)
一、什么是代理模式代理模式:为其他对象提供一种代理可以控制对这个对象的访问。 代理模式(Proxy)结构图Subject类:public abstract class Subject { public abstract void request();}Real...原创 2018-03-04 17:24:25 · 176 阅读 · 0 评论 -
多线程学习(十)——线程相关类(ThreadLocal)
java为线程安全提供了一些工具类,如ThreadLocal类,它代表一个线程局部变量,通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副本,从而避免并发访问的线程安全问题。除此之外,java5还新增了大量的线程安全类。 通过使用ThreadLocal类可以简化多线程编程时的并发访问,使用这个工具类可以很简捷地隔离多线程程序的竞争资源。 ...原创 2018-02-28 23:00:11 · 262 阅读 · 0 评论 -
多线程学习(九)——线程池
系统启动一个新线程的成本式比较高的,因为它涉及到与操作系统交互。这种情况下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。 线程池再系统启动的时候,就创建大量空闲的线程,程序将一个Runnable对象或者Callable对象传给线程池,线程池就会启动一个线程来执行他们的run()或者call()方法,当run()或...原创 2018-02-28 22:05:01 · 309 阅读 · 0 评论 -
多线程学习(八)——线程通信之阻塞队列(BlockingQueue)控制线程通信(生产者、消费者问题)
java5提供了一个BlockingQueue接口,虽然它也是Queue的子接口,但是它的主要用途不是作为容器,而是作为线程同步工具。BlockingQueue有一个特征:当生产者线程试图向BlockingQueue种放入元素的时候,如果该队列已满,则该线程被阻塞;当消费者线程试图从BlockingQueue种取元素的时候,如果该队列已空,则该线程被阻塞。 程序的两个...原创 2018-02-28 13:49:57 · 452 阅读 · 0 评论 -
多线程学习(七)——线程通信之使用Condition通信
synchronized是隐式同步监视器,它可以使用wait(),notify(),notifyAll()方法来进行线程通信。 使用Lock对象来保证同步,需要使用java提供的Condition类来保持协调,使用Condition可以让那些已经得到Lock对象却无法继续执行的线程释放Lock对象,Condition对象也可以唤醒其他处于等待的线程。 C...原创 2018-02-28 11:26:43 · 519 阅读 · 0 评论 -
多线程学习(六)——线程通信之传统线程通信(存钱取钱问题)
假设系统中有两个线程,它们分别代表存款者和取钱者——假设系统有一种特殊的要求,系统要求存款者和取钱者不断地重复存款和取钱的动作,而且要求每当存款者将钱存入指定账户后,取钱者要立即取出这笔钱。不允许存款者连续两次存钱,也不允许取钱者连续两次取钱。 上面的功能可以借助Object类提供的wait(),notify()和notifyAll()三个方法,这三个方法不属于Threa...原创 2018-02-28 10:52:25 · 572 阅读 · 0 评论 -
多线程学习(一)——创建线程的三种方式及比较
最近在学习多线程,在这里总结一下学习到的内容(参考《疯狂Java讲义第3版》):一、创建线程有三种方式: 1、继承Thread类 2、实现Runnable接口 3、使用Callable和Future二、分别介绍用法:继承Thread类/*下面的例子通过运行结果会看到,有3个线程,两个子线程,一个主线程 * java运行时默认的主线程就是main()方法,其中main(...原创 2018-02-26 22:17:21 · 450 阅读 · 0 评论 -
多线程学习(二)——线程的生命周期
线程被创建并启动后,它既不是一启动就进入执行状态,也不是一直处于执行状态,线程的生命周期包括: 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead) 五种状态。线程启动以后,它不可能一直独自占着CPU,CPU需要在多条线程之间切换,所以线程的状态也会多次在运行,阻塞之间切换。新建和就绪状态 ...原创 2018-02-27 16:08:33 · 236 阅读 · 0 评论 -
多线程学习(四)——线程同步之同步代码块和同步方法(银行取钱问题)
关于线程安全问题,有一个很经典的问题——银行取钱问题。银行取钱的基本流程基本上可以分为以下几个步骤: 1、用户输入账户、密码,系统判断用户的账户、密码是否匹配 2、用户输入取款金额 3、系统判断取账户余额是否大于取款金额 4、如果余额大于取款金额,则取款成功;如果余额小于取款金额,则取款失败 在单一线程中这个流程没有任何问题...原创 2018-02-27 19:18:46 · 799 阅读 · 0 评论 -
多线程学习(五)——线程同步之同步锁(Lock)(银行取钱问题)
前面学习的synchronized是隐式的同步监视器。 从java5开始,java提供了一种功能更加强大得线程同步机制——通过显式定义同步锁对象来实现同步,这种机制下,同步锁由Lock对象来充当。 Lock提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock允许实现更加灵活的结构,可以具有差别很大的属性,并且支持...原创 2018-02-27 21:35:11 · 1294 阅读 · 0 评论 -
String,StringBuilder,StringBuffer的区别
转载自https://blog.youkuaiyun.com/rmn190/article/details/14920131、String 字符串常量,String是不可变的对象,因此在每次对String类型进行改变的时候,都相当于创建了一个新的String对象,然后将指针指向新的String对象,因此经常改变内容的字符串最好不要使用String,因为每次生成对象都会对系统的性能产生影响,特别是当内存中没有...转载 2018-05-17 14:50:00 · 171 阅读 · 0 评论