forked from examplehub/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSynchronizedThreadTest.java
More file actions
136 lines (121 loc) · 2.94 KB
/
SynchronizedThreadTest.java
File metadata and controls
136 lines (121 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.examplehub.basics.thread;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class Counter {
public static final Object lock = new Object();
public static int count = 0;
}
class SynchronizedThreadTest {
@Test
void test() {
SynchronizedThread synchronizedThread = new SynchronizedThread();
Thread first = new Thread(synchronizedThread);
Thread second = new Thread(synchronizedThread);
first.start();
second.start();
}
@Test
void testCounter() throws InterruptedException {
class AddThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; ++i) {
synchronized (Counter.lock) {
Counter.count++;
}
}
}
}
class DesThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
synchronized (Counter.lock) {
Counter.count--;
}
}
}
}
AddThread addThread = new AddThread();
DesThread desThread = new DesThread();
addThread.start();
desThread.start();
addThread.join();
desThread.join();
assertEquals(0, Counter.count);
}
@Test
void testSynchronizedThis() throws InterruptedException {
class Counter {
private int count = 0;
public void dec() {
synchronized (this) {
count = count - 1;
}
}
public void add() {
synchronized (this) {
count = count + 1;
}
}
public int getCount() {
return count;
}
}
Counter counter = new Counter();
var firstThread =
new Thread(
() -> {
for (int i = 0; i < 100; i++) {
counter.add();
}
});
var secondThread =
new Thread(
() -> {
for (int i = 0; i < 100; i++) {
counter.dec();
}
});
firstThread.start();
secondThread.start();
firstThread.join();
secondThread.join();
assertEquals(0, counter.getCount());
}
@Test
void testSynchronizedFunction() throws InterruptedException {
class Counter {
private int count = 0;
public synchronized void dec() {
count = count - 1;
}
public synchronized void add() {
count = count + 1;
}
public int getCount() {
return count;
}
}
Counter counter = new Counter();
var firstThread =
new Thread(
() -> {
for (int i = 0; i < 100; i++) {
counter.add();
}
});
var secondThread =
new Thread(
() -> {
for (int i = 0; i < 100; i++) {
counter.dec();
}
});
firstThread.start();
secondThread.start();
firstThread.join();
secondThread.join();
assertEquals(0, counter.getCount());
}
}