xiekun1103 2017-02-09 06:47 采纳率: 50%
浏览 1696
已采纳

java ThreadLocal空异常

class Account {
/*
* 定义一个ThreadLocal类型的变量,该变量将是一个线程局部变量 每个线程都会保留该变量的一个副本;tl是boolean[]类型,CSDN显示不了!
*/
private ThreadLocal tl = new ThreadLocal();
// 定义一个初始化tl成员变量的构造器
public Account(boolean[] str) {
this.tl.set(str);
// 下面代码用于访问当前线程的tl副本的值
System.out.println("---" + this.tl.get());
// 当前线程的tl副本的值
System.out.println("---" + this.tl.get()[5]);
}
// tl的getter方法
public boolean[] getTl() {
return tl.get();
}
}

class MyTest extends Thread {
// 定义一个Account类型的成员变量
private Account account;
// 定义一个String类型的成员变量
private String carName;
public MyTest(Account account, boolean[] name, String carName) {
super();
System.out.println("new对象:" +account+":"+account.getTl());
this.carName = carName;
this.account = account;
}
public void run() {
// name中boolean[]是否为空
if (account.getTl() == null) {
System.err.println("空异常:" + account+":"+account.getTl());
return;
}
// 循环10次
for (int i = 0; i < account.getTl().length; i++) {
if (account.getTl()[i] == false) {
account.getTl()[i] = true;
// 输出停车信息
System.out.println(carName + " 车主在" + account.getTl() + "找到的停车位是:" + (i + 1));
break;
}
}
}
}

public class ThreadLocalCarStopTest {
public static void main(String[] args) {
// 启动N条线程(即N辆车),N条线程共享同一个Account
boolean[] b = new boolean[10];
Account at = new Account(b);
new MyTest(at, b, "车1").start();
}
}
输出:
---[Z@1db9742
---false
new对象:net.test.Account@106d69c:[Z@1db9742
空异常:net.test.Account@106d69c:null

为什么出现空异常?在new MyTest时不为空,怎么启动线程后就为null?

  • 写回答

2条回答 默认 最新

  • zwt_supreme 2017-02-09 08:35
    关注

    ThreadLocal其实存储的key就是当前线程,value是你的值boolean[] str,所以在mian线程中new的Account对象,ThreadLocal的key是main线程,而你在线程MyTest中get的时候,key变成了MyTest线程,所以是null

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题