如果我在同一个类上同步两个方法,它们可以同时在同一个对象上运行吗?例如:
class A {
public synchronized void methodA() {
//method A
}
public synchronized void methodB() {
// method B
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我不能methodA()在两个不同的线程中对同一个对象运行两次.同样的事情methodB().
但是,在运行methodB()时我可以在不同的线程上methodA()运行吗?(同一个对象)
我最近读过Java的Observable类.我不明白的是:在通知观察者之前(notifyObservers())我必须调用setChanged().notifyObservers方法中有一个布尔值,要求我们调用setChanged.布尔值的目的是什么?为什么我必须调用setChanged()?
我正在使用Vector而不是ArrayList在多线程环境中使列表安全.但是ConcurrentModificationException当我尝试Vector在迭代它的同时添加项目时,我不断得到.为什么这样,我该如何预防呢?
QueueJava中是否有同步类?我正在寻找类似Vector(已同步)vs ArrayList(不是)的东西,但我没有实现List接口,而是在寻找它来实现Queue.
请注意,没有Collections.synchronizedQueue方法可以包装未同步的队列并使其同步.
我在这里问了一个关于迭代的问题Vector,我已经得到了一些很好的解决方案.但我读到了另一种更简单的方法.我想知道它是不是很好的解决方案.
synchronized(mapItems) {
Iterator<MapItem> iterator = mapItems.iterator();
while(iterator.hasNext())
iterator.next().draw(g);
}
Run Code Online (Sandbox Code Playgroud)
mapItems是一个同步集合:Vector.这是否使得Vector从安全的迭代ConcurrentModificationException?
如果我想要克隆类,为什么我必须覆盖克隆?所有类都延伸Object,为什么我必须覆盖Object clone方法?为什么我不能只调用原始的对象克隆方法?
在(最大)堆中,很容易及时找到最大的项目O(1),但要实际删除它,您需要复杂性O(log(n)).
因此,如果从堆中插入和删除两者O(log(n)),堆超过二叉树表示优先级队列的优点是什么?
collections implementation priority-queue binary-heap data-structures
在我看来,堆超过二叉树的唯一优势是在二进制树中以O(1)而不是O(log(2)n)的复杂度找到堆中的最小项.
实现优先级队列时,您需要从数据结构中删除每个最小的项目.从树中删除最小的项,并且两个堆都以O(log(2)n)的复杂度完成.Althogh从树中删除项目可能更复杂.删除没有孩子的项目非常简单.
我的问题是为什么在实现优先级队列时使用堆而不是二叉树(在这种情况下更简单)?
我试图将我用Eclipse编写的项目移动到另一台计算机上.我尝试声明正确的工作区,但项目没有出现在Eclipse中.
有没有办法传输整个项目,还是我必须用它的包重建项目并只传输.java文件?
如何将没有特定大小的数组声明为类成员?我想在类构造函数中立即设置此数组的大小.是否可以在不使用堆或不调整数组大小的情况下执行此类操作?
java ×8
synchronized ×4
collections ×2
vector ×2
arrays ×1
binary-heap ×1
binary-tree ×1
c++ ×1
clone ×1
constructor ×1
eclipse ×1
java-threads ×1
object ×1
project ×1
queue ×1