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

wordpress网站定制客户管理系统 软件

wordpress网站定制,客户管理系统 软件,学院网站的系统建设方式,成全视频免费高清观看在线小说1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时#xff0c;为了防止频繁地创建对象使得内存飙升#xff0c;单例模式可以让程序仅在内存中创建一个对象#xff0c;让所有需要调用的地方都共享这一单例对象。…1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时为了防止频繁地创建对象使得内存飙升单例模式可以让程序仅在内存中创建一个对象让所有需要调用的地方都共享这一单例对象。 1.1单例模式的类型 单例模式包含两种类型 饿汉式在类加载的时候已经创建好对象等待被使用懒汉式在真正需要使用对象的时候才去创建对象 1.2饿汉式创建单例对象 饿汉式在类加载的时候已经创建好该对象在程序调用的时候直接返回该对象即可不需要等到使用时再创建。 public class Singleton{private static final Singleton singleton new Singleton();//此时已经实例化好了一个对象内存中已经存在了因此不会再存在多个Singleton对象了private Singleton(){}public static Singleton getInstance() {return singleton;} } 1.3懒汉式创建单例对象 懒汉式创建单例对象就是在使用单例对象之前先判断是否已经被实例化了如果已经被实例化则可以直接使用否则才开始实例化。 public class Singleton {private static Singleton singleton;private Singleton(){}public static Singleton getInstance() {if (singleton null) {singleton new Singleton();}return singleton;}} 这就是一个懒汉式创建单例对象此时已经可以进行使用。但是还是存在一些问题。比如并发操作时两个线程同时判断该对象为空那么两个线程都会实例化对象所以就会创建两个对象已经不满足单例模式。 此时的解决办法就是在方法上加锁或者对类对象加锁如下 public static synchronized Singleton getInstance() {if (singleton null) {singleton new Singleton();}return singleton; } // 或者 public static Singleton getInstance() {synchronized(Singleton.class) { if (singleton null) {singleton new Singleton();}}return singleton; } 此时这样加锁就规避了两个线程同时创建对象当一个线程获取锁时另一个线程需要阻塞等待保证从始至终只创建一个对象。但是这样的话在每次获取对象时候都需要获取锁并发性能较差。 所以我们需要优化首先判断对象是不是为空如果为空才获取锁进行对象的实例化如果首次判断不为空那么直接可以使用对象不用再获取锁。 所以直接在方法上加锁的方式不可取因为无论如何每次都要获取锁 public static Singleton getInstance() {if (singleton null) { // 线程A和线程B同时看到singleton null如果不为null则直接返回singletonsynchronized(Singleton.class) { // 线程A或线程B获得该锁进行初始化if (singleton null) { // 其中一个线程进入该分支另外一个线程则不会进入该分支singleton new Singleton();}}}return singleton; } 1.4加入volatile防止指令重排序 创建一个对象在JVM中会经过三步 1为singleton分配内存空间 2初始化singleton对象 3将singleton指向分配好的内存空间 指令重排序是指JVM在保证最终结果正确的情况下可以不按照程序编码的顺序执行语句尽可能提高程序的性能 在这三步中第2、3步有可能会发生指令重排现象创建对象的顺序变为1-3-2会导致多个线程获取对象时有可能线程A创建对象的过程中执行了1、3步骤线程B判断singleton已经不为空获取到未初始化的singleton对象就会报NPE异常。文字较为晦涩可以看流程图 使用volatile关键字可以防止指令重排序volatile可以保证指令执行顺序与程序指明顺序一致不会发生改变。 public class Singleton {private static volatile Singleton singleton;private Singleton(){}public static Singleton getInstance() {if (singleton null) { // 线程A和线程B同时看到singleton null如果不为null则直接返回singletonsynchronized(Singleton.class) { // 线程A或线程B获得该锁进行初始化if (singleton null) { // 其中一个线程进入该分支另外一个线程则不会进入该分支singleton new Singleton();}}}return singleton;}} 2.线程池 线程池顾名思义就是一次创建多条线程放在一个池子里用的时候拿出来一个用完之后放回去。 在实际业务中需要用到许多线程虽然创建线程相比于创建进程来说比较轻量级但是频繁的创建销毁也会消耗很多的资源。线程池最大的好处就是减少每次启动销毁线程的损耗。  2.1jdk中默认线程池 public static void main(String[] args) {// 1. 用来处理大量短时间工作任务的线程池,如果池中没有可用的线程将创建新的线程如果线程空闲60秒将收回并移出缓存ExecutorService cachedThreadPool Executors.newCachedThreadPool();// 2. 创建一个操作无界队列且固定大小线程池ExecutorService fixedThreadPool Executors.newFixedThreadPool(3);// 3. 创建一个操作无界队列且只有一个工作线程的线程池ExecutorService singleThreadExecutor Executors.newSingleThreadExecutor();// 4. 创建一个单线程执行器可以在给定时间后执行或定期执行。ScheduledExecutorService singleThreadScheduledExecutor Executors.newSingleThreadScheduledExecutor();// 5. 创建一个指定大小的线程池可以在给定时间后执行或定期执行。ScheduledExecutorService scheduledThreadPool Executors.newScheduledThreadPool(3);// 6. 创建一个指定大小不传入参数为当前机器CPU核心数的线程池并行地处理任务不保证处理顺序Executors.newWorkStealingPool();} 2.2创建系统自带的线程池 ThreadPoolExecutor threadPoolExecutor new ThreadPoolExecutor(5,//核心线程数10,//最大线程数1,//临时线程存活的时间TimeUnit.SECONDS,//时间单位new LinkedBlockingQueue(20),//阻塞队列类型}; 2.3线程池的工作流程 2.4拒绝策略 ThreadPoolExecutor.AbortPolicy这个策略是直接拒绝也是默认的策略 ThreadPoolExecutor.CallerRunsPolicy将任务返回给调用者(调用的线程) ThreadPoolExecutor.DiscardOldestPolicy放弃最早等待的任务 ThreadPoolExecutor.DiscardPolicy放弃最新的任务 3.死锁 3.1什么是死锁 多个线程同时被阻塞它们中的一个或者全部都在等待某一个资源释放。由于线程被无限期的阻塞导致程序不能正常终止 3.2死锁所要具备的条件 互斥条件该资源任意时刻只有一个线程占用请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放不剥夺条件线程已获得的资源在未使用完成之前其他线程不能强行剥夺只有自己使用完毕之后才释放资源循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系 3.3如何避免死锁 只要破坏产生死锁四个条件的其中一个就可以打破死锁 破坏互斥条件这是锁的基本条件不能打破破坏不剥夺条件占用部分资源的线程进一步申请资源时如果申请不到则释放它所有的资源破坏请求与保持条件一次性申请全部所需资源破坏循环等待条件靠按序申请资源来预防按照某一顺序申请资源释放资源则是反序释放。破坏循环等待条件锁排序法可以设计一套获取锁的策略先获取哪个锁后获取哪个锁按顺序获取就会避免死锁问题。
http://wiki.neutronadmin.com/news/244748/

相关文章:

  • 北京手机专业网站建设公司网站中文名称注册
  • 做网站网站代理怎么找客源做网站servlet
  • 织梦网站模板怎么安装广东工厂搜索seo
  • 丹东制作网站公司网站群建设 公司
  • 网站安全狗 拦截301asp婚纱摄影网站源码
  • 深圳市住建设局网站首页公司的网站打不开
  • 建设部网站 注册违规陕西网站建设哪家强
  • 免费建筑图纸下载网站电子商务平台开发建设
  • 怎么做网站中英文版本移动商城touch版h5页面
  • 做那个类型的网站赚钱专业建站外包
  • 南宁建站程序网站首页欣赏
  • 外贸服装商城网站建设菜鸟教程网站首页制作
  • 邵东网站建设wordpress 免费采集
  • 如何防护恶意网站自贡公司做网站
  • 广西城乡和建设厅网站首页中国商机创业网
  • 网络推广网站首页大图网站上传后没有后台
  • 南宁网站定制开发网站开发公司怎么能接到单子
  • 网站栏目模块大连电子商务网站建设
  • vue做的网站多么一个工厂做网站有用吗
  • 做网站都需要哪些费用怎样进行网站建设步骤
  • 网站维护会关闭吗中关村手机排行榜
  • 阿里云服务器 怎么设置网站环境任丘建设银行网站
  • dede如何手机网站和电脑网站的数据同步更新wordpress怎么发邮件
  • 小说网站建设吧中国十大猎头公司介绍
  • 建一个自己用的网站要多少钱做营销型网站的教程
  • 肇庆东莞网站建设大连市建设市场综合管理平台
  • 音乐网站开发开发牌具做网站可以吗
  • 西宁专业网站建设wordpress添加友链
  • 高端网站建设公司哪里济南兴田德润实惠吗免费推广平台软件有哪些
  • 沈阳网站建设首选龙兴科技百度一下 你知道首页