皮皮网
皮皮网
tomcat源码阅读要多久

【app页面源码】【http源码1】【vip解码源码】javassist源码

时间:2024-12-29 00:46:15 分类:焦点 编辑:中央空调源码
1.android studio 可以使用javassist吗
2.通过transmittable-thread-local源码理解线程池线程本地变量传递的原理
3.Java学习资源

javassist源码

android studio 可以使用javassist吗

       å¼€å‘调试环境: Ubuntu .,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码

       ç”±äºŽAS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA

       ä¸€ã€ä¿®æ”¹Android Studio(以下简称AS)的内存配置

       å› ä¸ºåœ¨å¯¼å…¥æºç æ—¶éœ€è¦æ¶ˆè€—大量内存,所以先修改IDEA_HOME/bin/studio.vmoptions(x的机器修改studio.vmoptions)中-Xms和-Xmx的值。文档中使用的是m, 可自行修改。

        二、配置AS的JDK、SDK

       åœ¨IDE中添加一个没有classpath的JDK, 这样可以确保使用源码里的库文件

通过transmittable-thread-local源码理解线程池线程本地变量传递的原理

       最近几周,我投入了大量的时间和精力,完成了UCloud服务和中间件迁移至阿里云的工作,因此没有空闲时间撰写文章。不过,回忆起很早之前对ThreadLocal源码的app页面源码分析,其中提到了ThreadLocal存在向预先创建的线程中传递变量的局限性。恰好,我的一位前同事,HSBC的技术大牛,提到了团队引入了transmittable-thread-local(TTL)来解决此问题。借此机会,http源码1我深入分析了TTL源码,本文将全面分析ThreadLocal和InheritableThreadLocal的局限性,并深入探讨TTL整套框架的实现。如有对线程池和ThreadLocal不熟悉的读者,建议先阅读相关前置文章,本篇文章行文较为干硬,字数接近5万字,希望读者耐心阅读。

       在Java中,没有直接的API允许子线程获取父线程的实例。获取父线程实例通常需要通过静态本地方法Thread#currentThread()。vip解码源码同样,为了在子线程中传递共享变量,也常采用类似的方法。然而,这种方式会导致硬编码问题,限制了方法的复用性和灵活性。为了解决这一问题,线程本地变量Thread Local应运而生,其基本原理是通过线程实例访问ThreadLocal.ThreadLocalMap来实现变量的存储与传递。

       ThreadLocal与InheritableThreadLocal之间的区别主要在于控制ThreadLocal.ThreadLocalMap的创建时机和线程实例中对应的属性获取方式。通过分析源码,中值线源码可以清楚地看到它们之间的联系与区别。对于不熟悉概念的读者,可以尝试通过自定义实现来理解其中的原理与关系。

       ThreadLocal和InheritableThreadLocal的最大局限性在于无法为预先创建的线程实例传递变量。泛线程池Executor体系、TimerTask和ForkJoinPool等通常会预先创建线程,因此无法在这些场景中使用ThreadLocal和InheritableThreadLocal来传递变量。

       TTL提供了更灵活的解决方案,它通过委托机制(代理模式)实现了变量的传递。委托可以基于Micrometer统计任务执行时间并上报至Prometheus,然后通过Grafana进行监控展示。glibc源码调试此外,TTL通过字节码增强技术(使用ASM或Javassist等工具)实现了类加载时期替换Runnable、Callable等接口的实现,从而实现了无感知的增强功能。TTL还使用了模板方法模式来实现核心逻辑。

       TTL框架的核心类TransmittableThreadLocal继承自InheritableThreadLocal,通过全局静态变量holder来管理所有TransmittableThreadLocal实例。holder实际上是一个InheritableThreadLocal,用于存储所有线程本地变量的映射,实现变量的全局共享。disableIgnoreNullValueSemantics属性的设置可以影响NULL值的处理方式,影响TTL实例的行为。

       发射器Transmitter是TransmittableThreadLocal的一个公有静态类,提供传输TransmittableThreadLocal实例和注册当前线程变量至其他线程的功能。通过Transmitter的静态方法,可以实现捕获、重放和复原线程本地变量的功能。

       TTL通过TtlRunnable类实现了任务的封装,确保在执行任务时能够捕获和传递线程本地变量。在任务执行前后,通过capture和restore方法捕获和重放变量,实现异步执行时上下文的传递。

       启用TTL的Agent模块需要通过Java启动参数添加javaagent来激活字节码增强功能。TTL通过Instrumentation回调激发ClassFileTransformer,实现目标类的字节码增强,从而在执行任务时自动完成上下文的捕捉和传递。

       TTL框架提供了一种高效、灵活的方式来解决线程池中线程复用时上下文传递的问题。通过委托机制和字节码增强技术,TTL实现了无入侵地提供线程本地变量传递功能。如果您在业务代码中遇到异步执行时上下文传递的问题,TTL库是一个值得考虑的解决方案。

Java学习资源

       Java Commons

       Java tutorial

       WebService常用第三方webservice

       IDEEclipse

       Eclipse GUI Plugin

       Eclipse根据java代码生成UML图

       Tomcat

       Hudson

       Jenkins

       Atlassian Bamboo

       TeamCity

       JUnit

       DbUnit

       JMockit

       TestNG

       ReportNG

       SLF4J

       Log4j

       Logback

       Log4E代码评审

       guava

       jga

       Java Class Dependency Analyzer

       OW2Forge

       Rock

       apache

       Apache Commons

       sandbox中的项目无法直接通过maven进行依赖,必须通过svn下载源码,部署到本地maven仓库中。例如对于sandbox中的classscan项目:

       # 项目地址:commons.apache.org/sand...

       svn checkout mons/sandbox/classscan classscan

       cd classscan

       当install带有parent的maven项目时,如果没有把parent一并install,其它项目引用时会出现

       mvn install--Failed to read artifact descriptor for org.apache.maven.plugins:maven-source-plugin:jar:2.1.2

       cd parent (classscan/parent)

       mvn clean package install -DskipTests

       cd ../api (classscan/api)

       mvn clean package install -DskipTests

       cd ../bcel (classscan/bcel)

       mvn clean package install -DskipTests

       在pom.xml中添加依赖

       org.apache.commons.classscan bcel 0.2-SNAPSHOT org.apache.commons.classscan api 0.2-SNAPSHOT

       Eclipse中Update Project,选择Force Update of Snapshots/Releases

       Apache HttpComponents

       Maven and M2Eclipse

       maven快速下载某个jar包依赖的所有jar

       经常碰到这种事情:在一些非maven工程中(由于某种原因这种工程还是手工添加依赖的),需要用到某个新的类库(假设这个类库发布在maven库中),而这个类库又间接依赖很多其他类库,如果依赖路径非常复杂的话,一个个检查手动下载是很麻烦的事。下面给出一个便捷的办法,创建一个新目录里面建一个maven pom文件, 添加需要依赖的类库:

       4.0.0 com.dep.download dep-download 1.0-SNAPSHOT com.xx.xxx yy-yyy x.y.z

       在这个目录下运行命令,所有跟这个类库相关的直接和间接依赖的jar包都会下载到 ./target/dependency/下

       杂项

       间接依赖的jar包能否直接使用

       如果工程依赖A.jar,并用maven设置好依赖,同时A.jar会依赖B.jar,所以maven在下载A.jar的同时会下载B.jar,这时如果项目发现需要使用B.jar中的一些内容,在maven中不必从新设置依赖,可以在工程中直接使用。

       把某个本地jar包安装到本地仓库中

       mvn install:install-file -DgroupId=“edu.jiangxin” -DartifactId=”gcu” -Dversion=“1.0.0”

       -Dpackaging=”jar” -Dfile=“D:\CS\J2EE\lib\edu.jiangxin.gcu-1.0.0.jar”

       把某个本地jar包部署到某个远程仓库中

       mvn deploy:deploy-file -DgroupId=“edu.jiangxin” -DartifactId=”gcu” -Dversion=“1.0.0”

       -Dpackaging=”jar” -Dfile=“D:\CS\J2EE\lib\edu.jiangxin.gcu-1.0.0.jar” -Durl= yourlocalrepository:...

       -DrepositoryId=internal

       bintray

        bintray.com/

       Ant

       Eclipse Color Themes

       MyEclipse

       EclEmma

       eCobertura

       JavaNCSS

       Clover(收费)

       CAP (code analysis plugin)

       Visual Performance Analyzer

       VisualVM

       JD(Java Decompiler)

       注:不支持命令行使用,因而很难批量编译。

       jad

       注:jad支持命令行方式使用,最新版本为1.5.8g,支持的class版本过低。经常出现问题:The class file version is .0 (only .3, .0 and .0 are supported)。还有一个工具uuDeJava,也是基于jad,所以估计也难以避免这个问题。

       jdec

       JODED

       J Java Decompiler

       注:收费软件,没有试用过

       ProGuard

       FindBugs

       PMD

       Metric

       Jdepend

       SourceHelper

       Structure

       inFusion

       SourceMonitor

       Simian

       CheckStyle

       CCTE

       J-Technologies一家(收费)

       FORTIFY SCA(收费)

       coverity(收费)

       klocwork(收费)

       GProf

       Dot and Graphviz

       sikuli

       exe4j

       JBoss

       GlassFish

       Virgo

       Jetty

       cpDetector

       EZMorph

       Apache Shiro

       Struts

       Spring

       Hibernate

       iBATIS/MyBatis

       appfuse

       TopLink

       json

       neethi

       XML

       SAXON

       jsoup

       HTML Parser

       Java port of Mozilla charset detector(jchardet)

       JMX

       jsch

       * yFiles

       The yFiles diagramming software components are extensive class libraries that enable you to add high-quality diagramming functionality to your own software applications

       OpenLDAP

       Protobuf

       zip4j

       JFlex

       JavaCC

       sablecc

       Xtext

       antlr

       cglib

       javassist

       jclasslib

       ical4j

       分词规则引擎

       Drools

       jBPM

       OpenAS2

       Java Native Access (JNA)

       mpi

       Java

       eBus

       JACOBA

       Apache POI - the Java API for Microsoft Documents

       iText(AGPL)

       aspose

       MVEL(Drools)

       OGNL(Struts)

       SPEL(Spring)

       JSP EL

       freemarker

       Velocity

       Aurora

本文地址:http://abssuliao.net/news/06e594194052.html

copyright © 2016 powered by 皮皮网   sitemap