后面还是想到了一个办法来实现埋点的功能,就是利用线程池提供的 beforeExecute 和 afterExecute 两个方法,在线程执行之前和执行之后都会触发这两个方法。
@Override protected void beforeExecute(Thread t, Runnable r) { String threadName = Thread.currentThread().getName(); Transaction transaction = Cat.newTransaction(threadPoolName, runnableNameMap.get(r.getClass().getSimpleName())); transactionMap.put(threadName, transaction); super.beforeExecute(t, r); } @Override protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); String threadName = Thread.currentThread().getName(); Transaction transaction = transactionMap.get(threadName); transaction.setStatus(Message.SUCCESS); if (t != null) { Cat.logError(t); transaction.setStatus(t); } transaction.complete(); transactionMap.remove(threadName); }后面的代码大家自己去看就行了,本文到这里就结束了。如果感觉本文还不错的记得转发下哦!
多谢多谢。
最后感谢美团技术团队的那篇文章,虽然没有分享源码,但是思路什么的和应用场景都讲的很明白。
感兴趣的 Star 下呗:https://github.com/yinjihuan/kitty