code_junkie

How do you ensure multiple threads can safely access a class field?

Nov 11th, 2011
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. public class SomeClass {
  2. private int val;
  3.  
  4. public synchronized int getVal() {
  5. return val;
  6. }
  7.  
  8. private void setVal(int val) {
  9. this.val = val;
  10. }
  11. }
  12.  
  13. int old = someThing.getVal();
  14. if (old == 1) {
  15. someThing.setVal(2);
  16. }
  17.  
  18. synchronized(someThing) {
  19. int old = someThing.getVal();
  20. if (old == 1) {
  21. someThing.setVal(2);
  22. }
  23. }
  24.  
  25. public class ThreadSafeSomeClass {
  26.  
  27. private final AtomicInteger value = new AtomicInteger(0);
  28.  
  29. public void setValue(int x){
  30. value.set(x);
  31. }
  32.  
  33. public int getValue(){
  34. return value.get();
  35. }
  36.  
  37. }
  38.  
  39. public class SomeClass {
  40.  
  41. private Object mutex = new Object();
  42. private int val = -1; // TODO: Adjust initialization to a reasonable start
  43. // value
  44. public int getVal() {
  45. synchronized ( mutex ) {
  46. return val;
  47. }
  48. }
  49.  
  50. private void setVal( int val ) {
  51. synchronized ( mutex ) {
  52. this.val = val;
  53. }
  54. }
  55. }
Add Comment
Please, Sign In to add comment