usm*_*sci 4 java variables performance static multithreading
为了不深入到我的软件应该做的事情,让我举一个我想要解决的例子,让这个简短而甜蜜.
假设我有一个名为X的基类和该类的实现,我将调用Y.类Y,当然,扩展基类X.假设我有20个对象将通过一个单独的线程为每个对象实例化类Y并且每个实例化都会将一个大文件加载到内存中.其中一些对象可能需要使用不同的文件,但为了简化这一点,我们可以说它们都需要访问同一个文件.
有没有办法定义在基类中静态指向这些文件的某个对象(变量),这样即使实现类通过20个不同的线程加载了20次,它们都可以共享同一个静态对象,这样该文件只需要加载一次???
谢谢你的帮助...
小智 5
如果是这样而且String只是让它成为一个protected static final String并且它是线程安全的.如果它是可变的,你将来会受到伤害.
如果它是一个二进制文件并且只能以只读方式使用,你可以用一个byte[]代替它来做同样的事情,String并确保你不要让任何东西改变数组中的字节.更好的方法是以只读方式实现某些Stream或Reader接口.
使线程安全的最简单和最安全的方法是使它不可变.该final关键字使得引用不可变的,它并不能使它指向不可变对象.因为a String是不可变的final,所以引用也是不可变的,你很高兴.如果你需要在所有线程之间共享更改的可变性,那么java.util.concurrent包将是你的朋友.
如果您创建变量,protected static final那么子类的所有实例,无论它们处于何种执行线程,都将看到数据.
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |