Merge pull request #10446 from SmartyAnsh/BAEL-4499-bad-practices-with-sync
BAEL-4499 - Synchronization bad practice and solution example
This commit is contained in:
commit
b9664eb89b
|
@ -0,0 +1,35 @@
|
|||
package com.baeldung.synchronizationbadpractices;
|
||||
|
||||
public class AnimalBadPractice {
|
||||
|
||||
private String name;
|
||||
private String owner;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public synchronized void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
synchronized(this) {
|
||||
this.owner = owner;
|
||||
}
|
||||
}
|
||||
|
||||
public AnimalBadPractice() {
|
||||
|
||||
}
|
||||
|
||||
public AnimalBadPractice(String name, String owner) {
|
||||
this.name = name;
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package com.baeldung.synchronizationbadpractices;
|
||||
|
||||
public class AnimalSolution {
|
||||
|
||||
private final Object objLock1 = new Object();
|
||||
private final Object objLock2 = new Object();
|
||||
|
||||
private String name;
|
||||
private String owner;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
|
||||
public void setName(String name) {
|
||||
synchronized(objLock1) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
synchronized(objLock2) {
|
||||
this.owner = owner;
|
||||
}
|
||||
}
|
||||
|
||||
public AnimalSolution() {
|
||||
|
||||
}
|
||||
|
||||
public AnimalSolution(String name, String owner) {
|
||||
this.name = name;
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package com.baeldung.synchronizationbadpractices;
|
||||
|
||||
public class SynchronizationBadPracticeExample {
|
||||
|
||||
public void stringBadPractice1() {
|
||||
String stringLock = "LOCK_STRING";
|
||||
synchronized (stringLock) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private final String stringLock = "LOCK_STRING";
|
||||
public void stringBadPractice2() {
|
||||
synchronized (stringLock) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private final String internedStringLock = new String("LOCK_STRING").intern();
|
||||
public void stringBadPractice3() {
|
||||
synchronized (internedStringLock) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private final Boolean booleanLock = Boolean.FALSE;
|
||||
public void booleanBadPractice() {
|
||||
synchronized (booleanLock) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private int count = 0;
|
||||
private final Integer intLock = count;
|
||||
public void boxedPrimitiveBadPractice() {
|
||||
synchronized (intLock) {
|
||||
count++;
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
public void classBadPractice() throws InterruptedException {
|
||||
AnimalBadPractice animalObj = new AnimalBadPractice("Tommy", "John");
|
||||
synchronized(animalObj) {
|
||||
while (true) {
|
||||
Thread.sleep(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung.synchronizationbadpractices;
|
||||
|
||||
public class SynchronizationSolutionExample {
|
||||
|
||||
private final String stringLock = new String("LOCK_STRING");
|
||||
public void stringSolution() {
|
||||
synchronized (stringLock) {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private int count = 0;
|
||||
private final Integer intLock = new Integer(count);
|
||||
public void boxedPrimitiveSolution() {
|
||||
synchronized(intLock) {
|
||||
count++;
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
private static int staticCount = 0;
|
||||
private static final Object staticObjLock = new Object();
|
||||
public void staticVariableSolution() {
|
||||
synchronized(staticObjLock) {
|
||||
staticCount++;
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue