Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

pr121197.aj 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import java.util.concurrent.locks.ReadWriteLock;
  2. import java.util.concurrent.locks.ReentrantReadWriteLock;
  3. import org.aspectj.lang.annotation.After;
  4. import org.aspectj.lang.annotation.Aspect;
  5. import org.aspectj.lang.annotation.Before;
  6. import org.aspectj.lang.annotation.Pointcut;
  7. @Aspect( "perthis( readOperations() || writeOperations() )" )
  8. public abstract class pr121197 {
  9. @Pointcut( "" )
  10. protected abstract void readOperations();
  11. @Pointcut( "" )
  12. protected abstract void writeOperations();
  13. private ReadWriteLock _lock = new ReentrantReadWriteLock();
  14. @Before( "readOperations()" )
  15. public void beforeReading() {
  16. _lock.readLock().lock();
  17. }
  18. @After( "readOperations()" )
  19. public void afterReading() {
  20. _lock.readLock().unlock();
  21. }
  22. @Before( "writeOperations()" )
  23. public void beforeWriting() {
  24. _lock.writeLock().lock();
  25. }
  26. @After( "writeOperations()" )
  27. public void afterWriting() {
  28. _lock.writeLock().unlock();
  29. }
  30. }
  31. @Aspect
  32. class ModelThreadSafety extends pr121197 {
  33. @Pointcut( "execution( * C.read*(..) )" )
  34. @Override
  35. protected void readOperations() {}
  36. @Pointcut( "execution( * C.write*(..) )" )
  37. @Override
  38. protected void writeOperations() { }
  39. }
  40. class C {
  41. public void readSomething() {}
  42. public void writeSomething() {}
  43. }