fork download
  1. package name.dhruba.kb.concurrent.striping;
  2.  
  3. public class IntrinsicStripedLockProvider {
  4.  
  5. private static final int DEFAULT_NUMBER_OF_LOCKS = 2048;
  6.  
  7. private static final int DOUG_LEA_BLACK_MAGIC_OPERAND_1 = 20;
  8. private static final int DOUG_LEA_BLACK_MAGIC_OPERAND_2 = 12;
  9. private static final int DOUG_LEA_BLACK_MAGIC_OPERAND_3 = 7;
  10. private static final int DOUG_LEA_BLACK_MAGIC_OPERAND_4 = 4;
  11.  
  12. private final Object[] locks;
  13. private final int numberOfLocks;
  14.  
  15. public IntrinsicStripedLockProvider() {
  16. this(DEFAULT_NUMBER_OF_LOCKS);
  17. }
  18.  
  19. public IntrinsicStripedLockProvider(int numberOfLocks) {
  20.  
  21. if ((numberOfLocks & (numberOfLocks - 1)) != 0) {
  22. throw new IllegalArgumentException("Lock number must be a power of two: "
  23. + numberOfLocks);
  24. }
  25.  
  26. if (numberOfLocks == 0) {
  27. throw new IllegalArgumentException("A zero size striped lock provider "
  28. + "does not have useful semantics.");
  29. }
  30.  
  31. this.numberOfLocks = numberOfLocks;
  32. this.locks = new Object[numberOfLocks];
  33. for (int i = 0; i < numberOfLocks; i++) {
  34. locks[i] = new Object();
  35. }
  36.  
  37. }
  38.  
  39. public Object getLockForKey(Object key) {
  40. int lockNumber = selectLock(key, numberOfLocks);
  41. return locks[lockNumber];
  42. }
  43.  
  44. private static int selectLock(Object key, int numberOfLocks) {
  45. return key == null ? 0 : hash(key) & (numberOfLocks - 1);
  46. }
  47.  
  48. private static int hash(Object object) {
  49. int h = object.hashCode();
  50. h ^= (h >>> DOUG_LEA_BLACK_MAGIC_OPERAND_1) ^ (h >>> DOUG_LEA_BLACK_MAGIC_OPERAND_2);
  51. return h ^ (h >>> DOUG_LEA_BLACK_MAGIC_OPERAND_3) ^ (h >>> DOUG_LEA_BLACK_MAGIC_OPERAND_4);
  52. }
  53.  
  54. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:3: error: class IntrinsicStripedLockProvider is public, should be declared in a file named IntrinsicStripedLockProvider.java
public class IntrinsicStripedLockProvider {
       ^
1 error
stdout
Standard output is empty