存档

‘工作’ 分类的存档

AbstractOwnableSynchronizer的疑问

2014年9月26日 没有评论

ReentrantLock内部用到了AbstractQueuedSynchronizer(也就是AQS),而AbstractQueuedSynchronizer是AbstractOwnableSynchronizer(先简称AOS吧)的子类。
翻AOS的源码,发现其本身就像是个ThreadHolder,表示当前被哪个线程占用。

疑问是这个线程的定义有问题

    /**
     * The current owner of exclusive mode synchronization.
     */
    private transient Thread exclusiveOwnerThread;

AQS专为并发设计的,所以第一反应就是线程安全,觉得这个Thread的定义仅有transient(不序列化),而没有volatile。
比起AQS里清一色的volatile,AOS里的这个Thread的定义没有volatile的原因,我一直没弄明白。

Java的wait或await被唤醒的误区

2014年9月26日 没有评论

先上一个例子,目的是输出一百次condition.await() wake up,代码如下

        final ReentrantLock lock = new ReentrantLock();
        final Condition condition = lock.newCondition();
        Thread th = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                for (int i = 0; i < 100; i++) {
                    lock.lock();
                    try {
                        condition.signal();
                    } finally {
                        lock.unlock();
                    }
                }
            }
        });
        th.start();
        for (int i = 0; i < 100; i++) {
            lock.lock();
            try {
                condition.await();
                System.out.println("condition.await() wake up " + i);
            } finally {
                lock.unlock();
            }
        }
        System.out.println("done!");

更多内容…

Java线程各种阻塞状态的成因

2014年9月26日 没有评论

Java线程的阻塞状态,共有三种:BLOCKED, WAITING, TIMED_WAITING
对于导致这三种状态的成因,源码里有明确的说明。

        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
        BLOCKED,

简述:BLOCKED就是等待进入synchronized块或wait被唤醒后返回synchronized块时的等待。
更多内容…

自作聪明的Mysqlclient

2014年8月20日 没有评论

用新端口启了一个mysql实例,用mysql的-P参数指定新端口,一直连的还是老的,百思不得其解。
偶然一天心血来潮,指定-h127.0.0.1,发现-P参数有效了。
结论:mysql自带的client(也就是mysql命令),在没指定-h时,-P参数无效。

在mysql –help里,未找到任何这种使用限制的描述。

更多内容…

分类: 工作 标签:

密码保护:nagios学习小结之一

2014年8月15日 要查看留言请输入您的密码。

这是一篇受密码保护的文章,您需要提供访问密码:

分类: 工作 标签:

密码保护:一主多从且一从上有其它写入的主迁移

2014年8月6日 要查看留言请输入您的密码。

这是一篇受密码保护的文章,您需要提供访问密码:

分类: 工作 标签: ,