Cat 跨线程之 TaggedTransaction 用法和原理分析

代码

package com.dianping.cat.message.internal;

import com.dianping.cat.Cat;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.unidal.helper.Threads;

import java.io.File;
import java.util.concurrent.TimeUnit;

public class MultiThreadingTest {
    @After
    public void after() {
    }

    @Before
    public void before() {
        Cat.initialize(new File("/data/appdatas/cat/client.xml"));
    }

    @Test
    public void testTaggedTransaction() throws Exception {
        Transaction t = Cat.newTransaction("TaggedRoot", "Root");
        Cat.newTaggedTransaction("TaggedChild", "Child1", "Tag1");
        Threads.forGroup().start(new TaggedThread(100, "Tag1"));
        TimeUnit.MILLISECONDS.sleep(200);
        t.setStatus(Message.SUCCESS);
        t.complete();
    }

    static class TaggedThread extends Thread {
        private int m_timeout;

        private String m_tag;

        public TaggedThread(int timeout, String tag) {
            m_timeout = timeout;
            m_tag = tag;
        }

        @Override
        public void run() {
            Transaction t = Cat.newTransaction("TaggedThread", m_tag);

            try {
                TimeUnit.MILLISECONDS.sleep(m_timeout);

                t.setStatus(Message.SUCCESS);
                Cat.getManager().bind(m_tag, "Child Tagged Thread");
            } catch (Exception e) {
                Cat.logError(e);
                t.setStatus(e);
            } finally {
                t.complete();
            }
        }
    }
}

模型图

源码分析

 

posted @ 2017-11-15 11:58  神州优车技术  阅读(736)  评论(0编辑  收藏  举报