编程小记一

本文分享了在实际Java开发中,提升并发编程效率的经验总结,包括合理运用单例模式、线程池、锁机制,以及如何正确释放资源,旨在帮助开发者优化程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程小记

开发中接触到的新的编程注意点

实际工作上手开发的过程中,虽然已经对java开发基础有了一定的了解,可以应用基本数据类型,获得参数,进行相应处理,但在考虑并发编程的情况下,对于锁,线程池等应用还是发现距离正规的开发流程有一定差距,所以在此记录一些注意的地方,算是总结提醒自己。

  1. 并发编程环境下 ,多使用单例模式,减少同一个类加载多次去发送消息,在类中加入单例方法,将发送消息的操作抽取出来放入;
  2. 注意线程池的应用,在某些情况下,比如可能有多个客户端向服务器发送请求时,可以预先设置线程池,减少创建线程所造成的开销。
    线程池具体构造方法可以如下:

tmpThreadPool.execute(() -> {
            try {
                //执行需要在单个线程中进行的操作
            }catch (Exception e){
                //打log,或抛异常
            }
        });
        

3、构造函数的使用,和上述线程池配合使用,在创建类对象时,就建造一个线程池,避免重复构建线程池,造成的的不必要系统开销。


tmpThreadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit,
                new ArrayBlockingQueue<>(1000), new RejectedExecutionHandler() {
            @Override
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                System.out.println("此部分为拒绝线程时所进行的处理,可以是打日志进行记录");
            }
        });//示例中使用的是RejectedExecutionHandler,还有其他handler可以选择,此处不举例
      

4、锁的使用,当需要建立某一个具体的资源对象时,可以使用锁,防止多并发情况下,对同一资源对象重复更改,最好加上double check,保证创建的资源对象不浪费。第一次是为了不必要的同步,第二次是在singleton等于null的情况下才创建实例。


//producer示例
Producer<String, String> producer = cache.get(topicName);
        if (producer == null) {
            synchronized (Lock) {//此处获得同步锁以后,将获取的资源对象再次进行获取,防止获取错误的资源对象
                //再次获取资源对象
                if (producer == null) {
                    //创建并更新资源对象
                }
            }
        }

5、DisposableBean,在整个类中获取完资源对象进行相应操作后,将资源对象进行释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值