Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit daed709

Browse files
author
Rajeev Kumar Singh
committed
Lock Objects and AtomicVariables examples
1 parent 9f491e6 commit daed709

File tree

10 files changed

+65
-11
lines changed

10 files changed

+65
-11
lines changed

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
.idea
33
out
44
*.iml
5+
*.class
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,60 @@
1+
import java.util.concurrent.ExecutorService;
2+
import java.util.concurrent.Executors;
3+
import java.util.concurrent.locks.ReadWriteLock;
4+
import java.util.concurrent.locks.ReentrantReadWriteLock;
5+
16
/**
27
* Created by rajeevkumarsingh on 11/05/17.
38
*/
9+
class ReadWriteCounter {
10+
ReadWriteLock lock = new ReentrantReadWriteLock();
11+
12+
private int count = 0;
13+
14+
public int incrementAndGetCount() {
15+
lock.writeLock().lock();
16+
17+
try {
18+
count = count + 1;
19+
return count;
20+
} finally {
21+
lock.writeLock().unlock();
22+
}
23+
}
24+
25+
public int getCount() {
26+
lock.readLock().lock();
27+
try {
28+
return count;
29+
} finally {
30+
lock.readLock().unlock();
31+
}
32+
}
33+
}
34+
435
public class ReadWriteLockExample {
36+
37+
public static void main(String[] args) {
38+
ExecutorService executorService = Executors.newFixedThreadPool(3);
39+
40+
ReadWriteCounter counter = new ReadWriteCounter();
41+
42+
Runnable readTask = () -> {
43+
System.out.println(Thread.currentThread().getName() +
44+
" Read Task : " + counter.getCount());
45+
};
46+
47+
Runnable writeTask = () -> {
48+
System.out.println(Thread.currentThread().getName() +
49+
" Write Task : " + counter.incrementAndGetCount());
50+
};
51+
52+
executorService.submit(readTask);
53+
executorService.submit(readTask);
54+
55+
executorService.submit(writeTask);
56+
57+
executorService.submit(readTask);
58+
executorService.submit(readTask);
59+
}
560
}

‎java-lock-objects-and-atomic-variables/src/ReentrantLockExample.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class ReentrantLockCounter {
1111

1212
private int count = 0;
1313

14+
// Thread Safe Increment
1415
public void increment() {
1516
lock.lock();
1617
try {
@@ -30,11 +31,13 @@ public int getCount() {
3031
public class ReentrantLockExample {
3132

3233
public static void main(String[] args) throws InterruptedException {
33-
ExecutorService executorService = Executors.newFixedThreadPool(2);
34+
ExecutorService executorService = Executors.newFixedThreadPool(5);
3435

3536
ReentrantLockCounter counter = new ReentrantLockCounter();
3637

37-
for(int i = 0; i < 1000; i++) {
38+
executorService.submit(() -> counter.increment());
39+
40+
for(int i = 0; i < 10; i++) {
3841
executorService.submit(() -> counter.increment());
3942
}
4043

‎java-lock-objects-and-atomic-variables/src/StampedLockExample.java

Lines changed: 0 additions & 5 deletions
This file was deleted.
Binary file not shown.
Binary file not shown.
Binary file not shown.

‎java-thread-and-runnable-examples/src/ThreadJoinExample.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public static void main(String[] args) {
1010
try {
1111
Thread.sleep(2000);
1212
} catch (InterruptedException e) {
13-
e.printStackTrace();
13+
thrownewIllegalStateException(e);
1414
}
1515
System.out.println("Exiting Thread 1");
1616
});
@@ -21,7 +21,7 @@ public static void main(String[] args) {
2121
try {
2222
Thread.sleep(4000);
2323
} catch (InterruptedException e) {
24-
e.printStackTrace();
24+
thrownewIllegalStateException(e);
2525
}
2626
System.out.println("Exiting Thread 2");
2727
});
@@ -33,7 +33,7 @@ public static void main(String[] args) {
3333
try {
3434
thread1.join(1000);
3535
} catch (InterruptedException e) {
36-
e.printStackTrace();
36+
thrownewIllegalStateException(e);
3737
}
3838

3939
System.out.println("Waited enough! Starting Thread 2 now");
Binary file not shown.

‎java-thread-and-runnable-examples/src/ThreadSleepExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static void main(String[] args) {
2222
try {
2323
Thread.sleep(2000);
2424
} catch (InterruptedException e) {
25-
e.printStackTrace();
25+
thrownewIllegalStateException(e);
2626
}
2727
}
2828
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /