`
文章列表
《编程思想之多线程与多进程(1)》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized. synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;4. 修 ...
什么是线程 什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱。 任务调度 线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片, ...
/** * 注意的问题: * 0.构造有几种方式 * 1.加减乘除 * 2.精度问题 * 3.比较大小 */ /** * 设置精度: * BigDecimal.setScale()方法用于格式化小数点 * setScale(1)表示保留一位小数,默认用四舍五入方式 * setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 * setScale(1,BigDecimal.ROUND_ ...
要点:   // 属性值获取 String Element.getAttribute(name); //标签值通过父元素对象获取 NodeList parentElement.getElementsByTagName(name); //标签中间的值获取 String Element.getTextContent()   private void loadSdataConfig() throws RuntimeException { // 属性值获取 String Element.getAttribu ...
外观模式:提供了一个统一的接口,用来访问子系统中的一大堆接口,外观定义了一个高层接口,让子系统更容易使用。   意图: 让接口更加简单。   public interface Light { void on(); void off(); void dim(); }   public interface Screen { void up(); void down(); }   public interface DvdPlayer { void on(); void off(); void pau ...
适配器模式:将一个类的接口,转换成客户期望的另外一个接口,适配器将原本接口不兼容的类可以合作无间。   意图:不改变接口,但加入责任      /** *暴露的公共接口 * Created by Administrator on 2018/1/9. */ public interface Duck { void quack(); void fly(); }   /** * 需要被适配的接口 * Created by Administrator on 2018/1/9. */ public interface Turkey { ...
命令模式:将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。   public interface Command { /** * 执行动作 * */ void execute(); /** * 撤销功能 * */ void undo(); }   public class Light { public void on(){ System.out.println("light is on"); ...

代码优化

    博客分类:
  • java
字符串:String 是final类,初始化之后,不会再改变,尽量不要使用+来对字符串进行拼接。下面举几个栗子:   片段一:禁止在循环体中使用通过+ 来拼接字符串   /** * 禁止在循环体中使用通过 + 来拼接字符串 * */ String result = ""; for (int i = 0; i < 100; i++) { result += "z"; // result = new StringBu ...
  单例模式:确保一个类只有一个实例,并提供一个全局访问点   单例有两种方法:1延迟加载,2非延迟加载   package com.em.singleton; /** * Created by Administrator on 2017/12/23. */ public class Singleton { /* * 必须是私有构造方法 * */ private Singleton(){} /** * * 非延迟加载 * **/ private static ...
装饰器模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。   意图:将一个接口转换为另一个接口    设计原则:开闭原则(对类的扩展开放,对修改关闭)   装饰器模式设计要点: 1.装饰者和被装饰对象有相同的超类型 2.可以用一个或者多个装饰者去包装一个对象 3.装饰者可以在所委托被装饰者的行为之前或者之后,加上自己的行为,已达到特定的目的   /** * Created by Administrator on 2017/12/10. * 饮料类 */ public abstract class Beverage { ...
工厂模式:具体的可以分为两种,分别是工厂方法模式 、抽象工厂模式。   工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到了子类。 设计原则:依赖倒置原则(要依赖抽象,而不是依赖具体类)。 遵守依赖倒置原则的几个建议: 1.变量不可以持有具体类的引用(如果使用new,就会持有具体类的引用,可以改用工厂来避开这样的做法) 2.不要让类派生自具体类(如果派生自具体类,你就会依赖具体类,请派生自一个抽象【接口或者抽象类】) 3.不要覆盖基类中已实现的方法(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已 ...
每个程序员都应牢记的7种坏味道,11种原则,23种模式    23种设计模式详解:   http://www.runoob.com/design-pattern/design-pattern-tutorial.html   (一)7种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 4.粘滞性: 做正确的事情比做错误的事情要困难。 5.复杂性(不必要的): 设计中包含有不具任何 ...

节约内存

    博客分类:
  • java
http://blog.csdn.net/numbibi/article/details/7492808 http://blog.csdn.net/l_215851356/article/details/54581454
观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 设计原则: 1.为交互对象之间的松耦合设计   注意:java本身自带了这种模式的接口。     具体实现如下:     /** *主题接口 */ public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); }     / ...
策略模式:定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算法的变化独立于使用算法的客户。 设计原则: 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 2.针对接口编程(针对超类)而不是针对实现编程。 3.多用组合少用继承。   抽象出来的飞行行为: public interface FlyBehavior { void fly(); }   具体的不同飞行行为: public class FlyWithLag implements FlyBehavior{ @Override pu ...
Global site tag (gtag.js) - Google Analytics