永发信息网

如何判断 Java 线程并发的安全性

答案:2  悬赏:30  手机版
解决时间 2021-03-22 15:35
  • 提问者网友:富士山上尢
  • 2021-03-21 14:56
如何判断 Java 线程并发的安全性
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-03-21 16:08
总的结论:java是线程安全的,即对任何方法(包括静态方法)都可以不考虑线程冲突,但有一个前提,就是不能存在全局变量。如果存在全局变量,则需要使用同步机制。

如下通过一组对比例子从头讲解:
在多线程中使用静态方法会发生什么事?也就是说多线程访问同一个类的static静态方法会发生什么事?是否会发生线程安全问题?
public class Test {
public static void operation(){
// ... do something
}
}
事实证明只要在静态函数中没有处理多线程共享数据,就不存在着多线程访问同一个静态方法会出现资源冲突的问题。下面看一个例子:
public class StaticThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
StaticAction.print();
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new StaticThread()).start();
}
}
}
public class StaticAction {
public static int i = 0;
public static void print() {
int sum = 0;
for (int i = 0; i < 10; i++) {
System.out.print("step " + i + " is running.");
sum += i;
}
if (sum != 45) {
System.out.println("Thread error!");
System.exit(0);
}
System.out.println("sum is " + sum);
全部回答
  • 1楼网友:酒者煙囻
  • 2021-03-21 16:48
线程安全是指要控制多个线程对某个资源的有序访问或修改,而在这些线程之间没有产生冲突。 在java里,线程安全一般体现在两个方面: 1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如arraylist和vector,hashmap和hashtable(后者每个方法前都有synchronized关键字)。如果你在interator一个list对象时,其它线程remove一个element,问题就出现了。 2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.threadlocal类,而没有java关键字支持,如像static、transient那样。 记得采纳哦
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯