`
文章列表
相比于synchronized,ReentrantLock 提供了更多的灵活性来处理不可用的锁。下面具体来介绍一下ReentrantLock 的使用。 1.  实现可轮询的锁请求 在内部锁中,死锁是致命的——唯一的恢复方法是重新启动程序,唯一的预防方法是在构建程序时不要出错。而可轮询的锁获取模式具有更完善的错误恢复机制,可以规避死锁的发生。 如果你不能获得所有需要的锁,那么使用可轮询的获取方式使你能够重新拿到控制权,它会释放你已经获得的这些锁,然后再重新尝试。可轮询的锁获取模式,由tryLock()方法实现。此方法仅在调用时锁为空闲状态才获取该锁。如果锁可用,则获取锁,并立即返回值tru ...
Java 内存模型 -------------- 内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。对象最终存储在内存中,但编译器、运行库、 ...
java.util.concurrent 包 原子量、并发集合、同步器、可重入锁 在大型应用程序中,把线程管理和创建工作与应用程序的其余部分分离开更有意义。 线程池封装线程管理和创建线程对象。 可以使用 volatile 变量来以比同步更低的成 ...
进程VS程序 --进程是执行程序的动态过程,而程序是进程运行的静态文本。 --一个进程可以执行一个或多个程序,反之,一个程序可以被多个进程调用。 --程序是指令码,而进程是一次执行过程。 -------------------------------------------- 进程通常有3个部分组成:1.程序 ,2.数据集合 ,3进程控制块(ProcessControlBlock,PCB)。 进程的程序部分描述了进程所要完成的功能。数据集合部分则有两方面的内容,及程序运行时所需的数据部分和工作区。 如果一个程序能为多个线程同时共享执行,它是进程执行时不可修改的部分。而数据集合部分则通常为一个进 ...
package org.design.patterns; /** * 复合模式: * 结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。 * * * MVC复合模式: * --控制器的策略模式 * 视图和控制器实现了经典的策略模式:视图是一个对象, ...
package org.design.patterns; /** *代理模式: *为另一个对象提供一个替身或占位符以控制对这个对象的访问。 * * 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问, * 被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。 */ //==============================下面是一个动态代理的例子========== import java.lang.reflect.InvocationHandler; import java.lang.refle ...
package org.design.patterns; /** * 状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 * */ // 状态接口 public interface State { void handle(); } // 状态实现 class Step1State implements State { @Override public void handle() { System.out.println("ConcreteStateA.handle()"); } } c ...
package org.design.patterns; import java.util.ArrayList; import java.util.List; /** *迭代器模式: *提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 * */ //下面以java.uitil.Iterator为例进行说明 public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } /* * 以下是java. ...
package org.design.patterns; /** * 模板方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 * 模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。 */ //抽象类 public abstract class AbstractTemplateMethod { /** * 模板方法定义了算法的实现步骤,一般定义为final类型的,使得子类无法覆盖 其中的抽象方法有待子类去实现 */ final void templateMethod() { // "必须" 由 ...
package org.design.patterns; /** *适配器模式: *将类的接口,转换成客户期望的另一个接口。 *适配器让原本接口不兼容的类可以合作无间。 */ public class Adapter { //关于适配器的例子,这里就不再写了,下面的InputStreamReader是很好的例子 } /** * 外观模式: * 提供了一个统一的接口,用来访问子系统的一群接口。 * 外观定义了一个高层接口,让子系统更容易使用,将客户从一个复杂的子系统中解耦。 */ class Facade{ //就不再举例子了 } ...
package org.design.patterns; import java.util.List; /** * 命令模式: 将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。 命令模式 也支持undo、redo操作。 */ // 命令的顶层接口 public interface Command { public void execute(); } // 命令的实现 class CommandImp1 implements Command { Receiver receiver; public Co ...
package org.design.patterns; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.n ...
观察者模式: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 设计原则: 为了交互对象之间的松耦合设计而努力。 java中内置的观察者模式: java.util.Observer(接口 ...
package org.design.patterns; /** * 简单工厂: 把new对象的操作提取出来,放到一个类中,由该类统一负责对象的创建,这个类就可以称为 简单工厂。 * 如果把该工厂中创建对象的方法定义为static的,就称为是静态工厂(显然,这种不能被子类继承) */ class Product {// 简单的产品类,这里为了简单地说明问题,没有考虑产品的抽象 protected int id; protected String name; protected String type; // ... } class Simple ...
package org.design.patterns; /** * 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局(static)访问点。 */ //延迟实例化的实现方法(不能用于多线程情况) //如果不考虑多线程的情况,就选用该方法实现单例模式。 public class Singleton { private static Singleton uniqueInstance; private Singleton() { } public static Singleton getInstance() { ...
Global site tag (gtag.js) - Google Analytics