zxlzy 最近的时间轴更新
zxlzy

zxlzy

V2EX 第 480241 号会员,加入于 2020-03-31 15:25:35 +08:00
zxlzy 最近回复了
283 天前
回复了 edison520 创建的主题 程序员 业务复杂多变? Groovy 魔法让你轻松应对
个人观点,你这个业务场景更适合写代码。不适合用 groovy 。
2022-02-08 16:37:13 +08:00
回复了 LierD 创建的主题 酷工作 [Shopee] 后台开发工程师(深圳)-content- [Friends 方向]
一年半行不
能完全远程面试吗,现在人在北京
2021-12-10 11:42:23 +08:00
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@goalidea jdk9 开始有的,我用的 11
2021-12-09 17:14:21 +08:00
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
“每引入一次插件就得创建一次 ClassLoader”,这个有什么问题呢,你是担心这个操作影响性能?所以不想每次都创建新的 ClassLoader?
2021-12-09 14:54:31 +08:00
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@linuxsteam 首先你为什么要这样做呢。就算你不覆盖上次的,那你具体加载类的时候,还是只能用一个类加载器加载呀。
Class.forName 是可以传类加载器的。forName(String name, boolean initialize, ClassLoader loader)。
2021-12-09 14:49:12 +08:00
回复了 linuxsteam 创建的主题 Java Java 线程上下文 类加载器 会进行传递吗?
@BBCCBB 其实根本就没有父子线程的概念。
2021-12-09 11:46:56 +08:00
回复了 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();

}
}
2021-12-09 11:45:33 +08:00
回复了 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();

}
}

```
2021-11-22 11:35:38 +08:00
回复了 linquan 创建的主题 问与答 大量 if-else 的函数重构
map 的时间复杂度是 1
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2398 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 327ms · UTC 16:07 · PVG 00:07 · LAX 08:07 · JFK 11:07
Developed with CodeLauncher
♥ Do have faith in what you're doing.