zxlzy 最近的时间轴更新
zxlzy

zxlzy

V2EX 第 480241 号会员,加入于 2020-03-31 15:25:35 +08:00
zxlzy 最近回复了
一年半行不
能完全远程面试吗,现在人在北京
203 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@goalidea jdk9 开始有的,我用的 11
203 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
“每引入一次插件就得创建一次 ClassLoader”,这个有什么问题呢,你是担心这个操作影响性能?所以不想每次都创建新的 ClassLoader?
204 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@linuxsteam 首先你为什么要这样做呢。就算你不覆盖上次的,那你具体加载类的时候,还是只能用一个类加载器加载呀。
Class.forName 是可以传类加载器的。forName(String name, boolean initialize, ClassLoader loader)。
204 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@BBCCBB 其实根本就没有父子线程的概念。
204 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
代码贴错了

public class Main {

public static void main(String[] args) {

Thread mainThread = Thread.currentThread();
new Thread(new Runnable() {

@Override
public void run() {
try {
ClassLoader cl = new ClassLoader() {
@Override
public String getName() {
return "MyCloassLoader";
}
};
TimeUnit.SECONDS.sleep(3);
mainThread.setContextClassLoader(cl);
System.out.println("在" + Thread.currentThread().getName() + "设置了主线程的自定义 classLoader " + cl);
} catch (Exception e) {
e.printStackTrace();
}
}
}, "线程 1").start();

new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + "上下文 设置前的 classloader" + Thread.currentThread().getContextClassLoader());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, "线程 2").start();

}
}
204 天前
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
然而并不能啊。在设置 classLoader 前加个 Thead.sleep() 就知道不能了。你的结论就是错的。本质上是线程 1 先运行线程 2 才运行的。
```java
public class Main {

public static void main(String[] args) {

Thread mainThread = Thread.currentThread();
new Thread(new Runnable() {

@Override
public void run() {
try {
ClassLoader cl = new ClassLoader() {
@Override
public String getName() {
return "MyCloassLoader";
}
};
mainThread.setContextClassLoader(cl);
System.out.println("在" + Thread.currentThread().getName() + "设置了主线程的自定义 classLoader " + cl);
} catch (Exception e) {
e.printStackTrace();
}
}
}, "线程 1").start();

new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + "上下文 设置前的 classloader" + Thread.currentThread().getContextClassLoader());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, "线程 2").start();

}
}

```
221 天前
回复了 linquan 创建的主题 问与答 大量 if-else 的函数重构
map 的时间复杂度是 1
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4165 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 09:08 · PVG 17:08 · LAX 02:08 · JFK 05:08
Developed with CodeLauncher
♥ Do have faith in what you're doing.