volatile

volatile关键字使得变量具有可见性, 可见性变量具有这样的属性: 一个线程对该变量的修改会马上对别的线程可见.语言规范对线程的约束要宽松很多,只要保证线程在退出临界区(同步块)之后,修改的变量的新值对其他线程可见.

拿下面的代码来说,Data中的value成员变量如果不加volatile关键字,那么可能要等到修改value的writer线程退出synchronized同步块之后,reader线程读到的值才是1;而加了volatile修饰之后就能保证,在writer线程执行了this.value=value之后

reader线程读到的value的值就是1.当然事实上很多java虚拟机在实现上做了很多优化,即不必等到writer退出synchronized同步块value的新值就已经对其他线程可见了.不过加了volatile关键字之后就能完全确保这一点.

volatile关键字示例:

public class VolatileDemo {

    static Data data = new Data();
    
    public static void main(String[] args) throws Exception {
        Thread reader = new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println(data.getValue());
            }
        });
        
        Thread writer = new Thread(new Runnable(){
            @Override
            public void run() {
                data.setValue(1);
            }
        });
        
        writer.start();
        Thread.sleep(200);
        reader.start();
    }

    static class Data {
        private volatile int value;

        public void setValue(int value) {
            synchronized (this) {
                System.out.println("before update...");
                this.value = value;
                System.out.println("after update...");
                
                //耗时操作
                for(long i=0; i < Long.MAX_VALUE; i++) {
                    for(long j=0; j < 1; j++) {
                        long v = i*j;
                    }
                }
            }
        }
        public int getValue() {
            return this.value;
        }
    }
}

另一个示例:

public class PrintString implements Runnable {

    private boolean isContinuePrint = true;

    public boolean isContinuePrint() {
        return isContinuePrint;
    }

    public void setContinuePrint(boolean isContinuePrint) {
        this.isContinuePrint = isContinuePrint;
    }

    public void printStringMethod() {
        try {
            while (isContinuePrint) {
                System.out.println("run printStringMethod threadName=" + Thread.currentThread().getName());
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        printStringMethod();
    }
}

public class Run {

    public static void main(String[] args) {
        PrintString p = new PrintString();
        new Thread(p).start();
        p.setContinuePrint(false);
    }
}

面向对象-知识集

OMG: 对象管理组织(Object Management Group)

ULM: 统一建模语言(Unified Modeling Language)

MDA: 模型驱动架构(Model Driven Architecture)

CORBA: 公共对象请求代理体系结构(Common Object Request Broker Architecture)

OSGi: 开放服务网关协议(Open Service Gateway Initiative), 面向Java的动态模型系统, Java 模块化技术规范

人的两种状态

今天突然意识到自己有两种状态:被动接受和主动选择。

看电视,看电影,无聊时用手机看看新闻,这些时候自己处于被动接受状态;记英语单词,看专业书籍,编程学习时自己处于积极主动状态。

被动接受状态,也可以称为消极等待状态。此状态时,自己不需要做什么过多思考,也不需要自己做任何艰难的选择。只需要体验,感受,甚至享受(“舒适区”)。

主动选择状态,也可以称为积极主动状态。在这种状态下,需要大量的思考,记忆,做出选择(这是不是所谓的“拉伸区”,或者“学习区”)

读书记之《资本的逻辑:一看就懂的融资实用指南》

书名:《资本的逻辑:一看就懂的融资实用指南》

作者:黄嵩

简介:它以资本为视角,从PE如何选择企业、如何评估企业、如何签订协议、如何退出投资等方面再现了企业融资的全景过程,并对经典融资案例进行了专业解读,揭示了资本的内在逻辑。

点评:这本写得非常通俗易懂,但也不失深刻透彻。在阅读的过程中,我深刻地体会到资本对企业乃至整个商业社会的发展所起的巨大推动作用。

关于自控力

一 自控力的地位

1.自控力是取得成功的最基础,最核心,最重要的能力。

2.有了自控力,你就能去到任何你想去的地方。
3.研究自控力,增强自控力无比重要,也许这件事情就是你目前最重要的事情。

4.在获得足够的自控力之前,任何关于成功的书籍都没有阅读的价值。不管作者是卡耐基,还是曾国藩。

二 自控力个人经验

1.任何时刻,只有一件事情要做!注意:没有什么最重要的事情,就只有一件事情!——尽量缩短自己做选择的时间,甚至几乎不做选择,最极端(最好)的做法就是:抛硬币。


三 生理学机制

1.多巴胺

2.突触

3.阿尔维德·卡尔森, 保罗·格林加德, 埃里克·坎德尔

db link

创建db link的SQL:

create base link dblink1 connnect to <用户名> identified by <密码> using <本地配置的数据库实例名>

查询表:

select * from <表名>@<db link名>

使用注意:

连接数问题