当前位置: 首页 > 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://www.yutouwan.com/news/244748/

相关文章:

  • idea 做网站登录优化网站方法
  • 上海网站制作设计公司wordpress 按时间显示文章
  • 重庆重庆网站建设公司管理咨询公司能给接受咨询企业提供资金支持吗
  • 省住房和城乡建设厅官方网站山东网站建设网络公司
  • 甘肃省城乡住房建设厅网站贵州省文化旅游网站建设的必要性
  • wordpress网站关闭网站建设的数据所有权
  • 医疗类网站哪家做的好企业申请网站建设请示
  • 深圳做app网站的公司哪家好南京高端网站建设
  • 自己可以建设环保公益网站吗全国做网站公司前十名
  • 网站建设设计官网网页搜索公众号文章
  • 佛山网站建设多少钱河南宝盈建设工程有限公司网站
  • 网站建设评比文章哪个网站可以做360度评估
  • 网站怎么添加代码怎么去掉网站底部信息
  • 网站的主页按钮怎么做的网站生成系统
  • 网站建设及编辑岗位职责加拿大28怎么做网站代理
  • api接口开发网站开发Wordpress也
  • 三星网站建设内容淘词神器
  • 做公司网站用哪个公司比较好设备 光速东莞网站建设
  • 北京的电商平台网站wordpress哪个模版好用
  • 中国城乡住房和城乡建设部网站首页北京做网站推广兼职
  • 常州知名网站河北邯郸市简介
  • 青岛黄岛区网站开发网站上线 备案
  • 建设京东类的网站需要什么流程苏州市工程造价信息网
  • 新农村基础设施建设网站网站整站下载
  • 网站在哪备案无锡电商网站设计
  • 网站服务器的搭建建设企业网站得花多少
  • 微信定制开发小程序wordpress 百度优化 插件
  • 有关外贸的网站有哪些内容江西省寻乌县建设局网站
  • 做仿牌网站被封泾川县住房和城乡建设局网站
  • 网站首页设计代码做个人网站怎么赚钱