【发布时间】:2018-02-19 09:02:38
【问题描述】:
我想在线程之间同步对象,这些对象扩展了一个抽象类:
public abstract class GraphicObject {
public synchronized void test(){
//work...
}
}
class Circle extends GraphicObject {
}
class Rectangle extends GraphicObject {
}
考虑这个测试类:
public class Class {
void main(){
GraphicObject a=new Circle();
GraphicObject b=new Rectangle();
Runnable r1 = new MyThread(a);
new Thread(r1).start();
Runnable r2 = new MyThread(b);
new Thread(r2).start();
}
private class MyThread implements Runnable {
private GraphicObject g;
public MyThread(GraphicObject g) {
this.g=g;
}
public void run() {
g.test();
}
}
}
在这种情况下,a 和 b 是具有相同抽象类的独立对象。 test() 方法是否同步在一起?如果一个线程调用a.test() 被b.test() 锁定到所有其他线程?
我不希望,因为它们是不同的对象。
【问题讨论】:
-
你试过编译吗?
-
是的,但是我简化了我的代码,所以我删除了一些东西。现在我将测试类编辑为可编译,但是我的问题确实是理论上的
-
我不太确定链接的问题是否相同。
-
我同意:所谓的“重复”回答了一个不同的问题。我认为问题是你的标题。它似乎在问为什么你不能声明一个抽象
synchronized方法,但你的问题的主体确实是关于抽象 类 中的一个具体synchronized方法(即,一个类也恰好声明了至少一个抽象的 other 方法。) -
@jameslarge 你说得对,我的意思是抽象类中的同步方法...我正在编辑它
标签: java multithreading synchronization