问题描述
“一个只有行为,没有属性的类是线程安全的” 请问各位这句话对吗?一直在迷惑中。请详细解释下,谢谢。 问题补充:牟盖东 写道
解决方案
引用请如果将这个类设计为单例的工具类,其中的方法都为静态的。然后其他的类使用这些方法处理数据,或者通过这些方法获取资源,是否会出现线程问题呢? 正如之前说过的:引用而作为一个线程中的临时变量使用的话,这个类去访问别的共享数据仍然是能产生共享冲突的。 完全有可能出现,关键在于共享数据上。阁下问这样的问题,相比也是多线程程序没有写过多少。需要好好体会一下每个线程对共享数据访问时候,共享数据的变化情况。引用再请问方法在JVM内存中是如何来存储的呢?我只知道JVM会为每个对象开辟出一块内存,其中的 static 属性则会存储在这些对象内存之外。一个静态方法和一个普通的方法在内存中又是怎样存储的呢?方法的存储位置与静态和非静态没有多大联系了,不像数据。他们都是存储在代码段的。 (汇编中寄存器CS对应这个段的起始地址,编译器会根据方法名去找到对应的偏移量)
解决方案二:
所谓线程安全,就是没有共享数据的访问冲突。如果一个类没有数据成员,也就谈不上被共享,自然也就不能产生冲突。而作为一个线程中的临时变量使用的话,这个类去访问别的共享数据仍然是能产生共享冲突的。当然,平常所谓的 线程安全 是这个类被共享的时候不会冲突,像StringBuffer类。而StringBuilder类则是非线程安全的
解决方案三:
行为可以理解为函数,没有属性的类如果是指类属性,那么我认为是对的。1.线程无非就是数据的同步,如果在程序当中来讲的话,数据应该是用变量表示的。如果操作的是对象变量,那么各个线程之间是互不影响的。2.类变量可以理解为类当中的静态变量,如果多个对象实例在多线程环境下操作类变量,那么肯定会造成脏数据的,即线程的不安全。