发布于 2011-09-28 22:57:27
只是一个理论上的“答案”。:)
正如我所理解的,您在一些“切入点”/“连接点”中添加了独立的行为/“建议”。但是,同步将用于与其管理的代码紧密相关。
我想使用同步的方法是,如果它将作为建议附加,并作为一个“连接点”提供,其他“方面”将定义一些“建议”。
或者,您可能在“建议”中得到某种同步,同时尝试调用一些“联合点”。
发布于 2011-09-29 03:56:54
理论上,可以有一个AOP框架,它将同步添加到一组方法/类中。它甚至不难实现。但这通常不是你想要的。太多的同步和太少的同步一样糟糕,因为您要么会遇到死锁,要么会过多地序列化线程,以至于无法有效地使用多个内核。
恐怕在多线程编程方面没有什么更好的捷径。
发布于 2012-11-13 07:13:25
是的,同步可以被看作是一个方面。AOP背后的想法不是用来处理横切关注点的吗?然后,将同步视为横切关注点可以通过AOP来处理,而无需定义和使用外部库。
请考虑以下有关读写锁定的示例。每当对象被读/写时,您就可以捕获该方法并为并发控制提供足够的功能。
public abstract aspect ReadWriteLockSynchronizationAspect
perthis(readOperations() || writeOperations()) {
public abstract pointcut readOperations();
public abstract pointcut writeOperations();
private ReadWriteLock _lock = new SomeReadWriteLock();
before() : readOperations() {
_lock.readLock().acquire();
}
after() : readOperations() {
_lock.readLock().release();
}
before() : writeOperations() {
_lock.writeLock().acquire();
}
after() : writeOperations() {
_lock.writeLock().release();
}
}
perthis
为每个读/写操作创建一个新的方面。否则,只会创建一个方面,并且它的工作方式类似于一个单例对象。有关更多信息,请查看AspectJ在行动中。
https://stackoverflow.com/questions/7593281
复制相似问题