Java方法内的局部变量是否线程安全问题

Q1:下面这个方法中的变量x是否线程安全呢?

public static void method() {
	int x = 0;
	for(int i = 1;i<=10;i++) {
		x *= i;
	}
	System.out.println(x);
}

A:答案是安全的,当多个线程同时执行此方法时,每个线程都会产生一个自己的变量x,每个线程之间互不干扰,不会对其他线程的变量x有影响。

Q2:如果x是一个静态变量,那变量x是否还线程安全呢?

A:当变脸x是一个静态变量时,多个线程执行此方法时,每个方法都会读取这个变量,在操作完成后写回x中。相对这些线程来说,变量x是共享的。如果不对它进行保护,那么就存在线程安全问题。

Q3:下面这个方法中的对象sb是否线程安全?

public static void method(StringBuilder sb) {
	sb.append(1);
	sb.append(2);
	System.out.println(sb.toString());
}

A:在这里sb对象是作为参数传入的,这意味着它并不是线程私有的,多个线程都可以同时访问它。所以不是线程安全的。

Q4:这个方法中的对象sb又是否线程安全的呢?

public static StringBuilder method() {
	StringBuilder sb = new StringBuilder();
	sb.append(1);
	sb.append(2);
	return sb;
}

A:不是线程安全的。虽然sb对象是在方法内生成的对象。但是sb作为一个返回变量返回,其他线程可以去拿取它,对它进行并发的操作。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值