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 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿