阿里巴巴代码规范学习+redis stream

本文介绍了阿里巴巴的代码规范,重点关注volatile关键字的作用、深拷贝与浅拷贝的区分,以及日志输出的最佳实践。此外,还详细讨论了Redis Stream的使用,包括添加、截取、删除数据的操作,以及如何利用AOP处理数据。
摘要由CSDN通过智能技术生成

阿里巴巴代码规范学习

1.volatile
volatile是一个特征修饰符(type specifier)。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

如果两个线程想要取同一个值,A已经更新了数据,B还没有更新数据,那么为了让B取得最新的数据,设置变量为volatile

public class MyData {
   
        //int number = 0; // 没加volatile关键字
        volatile int number = 0;
        int changeNumber() {
   
            return this.number = 60;
        }
}
public class violate {
   
        // 验证可见性
        public static void main(String[] args) {
   
            MyData myData = new MyData();
            new Thread("AAA") {
   
                @Override
                public void run() {
   
                    try {
   
                        Thread.sleep(3000);
                       // 睡3秒后调用changeNumber方法将number改为60
                        System.err.println(Thread.currentThread().getName()
                                +  " update number to " + myData.changeNumber());
                    } catch (InterruptedException e) {
   
                        e.printStackTrace();
                    }
                };
            }.start();
            // 主线程
            while (myData.number == 0) {
   
            }
            // 如果主线程读取到的一直都是最开始的0,
            //将造成死循环,这句话将无法输出
            System.err.println(Thread.currentThread().getName()
                    + " get number value is " + myData.number);
        }

}

2.深拷贝浅拷贝

public class Age implements Cloneable {
   
    //年龄类的成员变量(属性)
    private int age;
    //构造方法
    public Age(int age) {
   
        this.age=age;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }

    @Override
    public String toString() {
   
        return this.age+"";
    }

    @Override
    public Object clone() {
   
        Object obj=null;
        try {
   
            obj=super.clone();
        } catch (CloneNotSupportedException e) {
   
            e.printStackTrace();
        }
        return obj;
    }
}

在 Student 的 clone() 方法中,需要拿到拷贝自己后产生的新的对象,然后对新的对象的引用类型再调用拷贝操作,实现对引用类型成员变量的深拷贝。

public class Student implements Cloneab
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值