package testSynchronized;
import java.nio.charset.MalformedInputException;
public class demo3 {
public static Integer mCount = 0;
public static synchronized int getCount() {
return mCount;
}
public synchronized void setCount() {
addCount();
}
public synchronized int addCount() {
return mCount++;
}
public static void main(String[] args) {
final demo3 demo3 = new demo3();
Thread thread1 = new Thread() {
@Override
public void run() { // TODO Auto-generated method stub int
int i = 100;
synchronized (demo3.getClass()) {
while (i-- > 0) {
System.out.print("begin " + i + ","
+ Thread.currentThread().getName() + ","
+ mCount + "\n");
demo3.setCount();
demo3.getCount();
System.out.print("end " + i + ","
+ Thread.currentThread().getName() + ","
+ mCount + "\n");
}
}
}
};
Thread thread2 = new Thread() {
@Override
public void run() { // TODO Auto-generated method stub int
int i = 100;
while (i-- > 0) {
System.out.print("begin " + i + ","
+ Thread.currentThread().getName() + "," + mCount
+ "\n");
demo3.setCount();
demo3.getCount();
System.out.print("end " + i + ","
+ Thread.currentThread().getName() + "," + mCount
+ "\n");
}
}
};
thread1.start();
thread2.start();
}
}
begin 99,Thread-1,0
end 99,Thread-1,1
begin 98,Thread-1,1
end 98,Thread-1,2
begin 97,Thread-1,2
end 97,Thread-1,3
begin 96,Thread-1,3
end 96,Thread-1,4
begin 95,Thread-1,4
end 95,Thread-1,5
begin 94,Thread-1,5
end 94,Thread-1,6
begin 93,Thread-1,6
end 93,Thread-1,7
begin 92,Thread-1,7
end 92,Thread-1,8
begin 91,Thread-1,8
end 91,Thread-1,9
begin 90,Thread-1,9
end 90,Thread-1,10
begin 89,Thread-1,10
end 89,Thread-1,11
begin 88,Thread-1,11
end 88,Thread-1,12
begin 87,Thread-1,12
end 87,Thread-1,13
begin 86,Thread-1,13
end 86,Thread-1,14
begin 85,Thread-1,14
end 85,Thread-1,15
begin 84,Thread-1,15
end 84,Thread-1,16
begin 83,Thread-1,16
end 83,Thread-1,17
begin 82,Thread-1,17
end 82,Thread-1,18
begin 81,Thread-1,18
end 81,Thread-1,19
begin 80,Thread-1,19
end 80,Thread-1,20
begin 79,Thread-1,20
end 79,Thread-1,21
begin 78,Thread-1,21
end 78,Thread-1,22
begin 77,Thread-1,22
end 77,Thread-1,23
begin 76,Thread-1,23
end 76,Thread-1,24
begin 75,Thread-1,24
end 75,Thread-1,25
begin 74,Thread-1,25
end 74,Thread-1,26
begin 73,Thread-1,26
end 73,Thread-1,27
begin 72,Thread-1,27
end 72,Thread-1,28
begin 71,Thread-1,28
end 71,Thread-1,29
begin 70,Thread-1,29
end 70,Thread-1,30
begin 69,Thread-1,30
end 69,Thread-1,31
begin 68,Thread-1,31
end 68,Thread-1,32
begin 67,Thread-1,32
end 67,Thread-1,33
begin 66,Thread-1,33
end 66,Thread-1,34
begin 65,Thread-1,34
end 65,Thread-1,35
begin 64,Thread-1,35
end 64,Thread-1,36
begin 63,Thread-1,36
end 63,Thread-1,37
begin 62,Thread-1,37
end 62,Thread-1,38
begin 61,Thread-1,38
end 61,Thread-1,39
begin 60,Thread-1,39
end 60,Thread-1,40
begin 59,Thread-1,40
end 59,Thread-1,41
begin 58,Thread-1,41
end 58,Thread-1,42
begin 57,Thread-1,42
end 57,Thread-1,43
begin 56,Thread-1,43
end 56,Thread-1,44
begin 55,Thread-1,44
end 55,Thread-1,45
begin 54,Thread-1,45
end 54,Thread-1,46
begin 53,Thread-1,46
end 53,Thread-1,47
begin 52,Thread-1,47
end 52,Thread-1,48
begin 51,Thread-1,48
end 51,Thread-1,49
begin 50,Thread-1,49
end 50,Thread-1,50
begin 49,Thread-1,50
end 49,Thread-1,51
begin 48,Thread-1,51
end 48,Thread-1,52
begin 47,Thread-1,52
end 47,Thread-1,53
begin 46,Thread-1,53
end 46,Thread-1,54
begin 45,Thread-1,54
end 45,Thread-1,55
begin 44,Thread-1,55
end 44,Thread-1,56
begin 43,Thread-1,56
end 43,Thread-1,57
begin 42,Thread-1,57
end 42,Thread-1,58
begin 41,Thread-1,58
end 41,Thread-1,59
begin 40,Thread-1,59
end 40,Thread-1,60
begin 39,Thread-1,60
end 39,Thread-1,61
begin 38,Thread-1,61
end 38,Thread-1,62
begin 37,Thread-1,62
end 37,Thread-1,63
begin 36,Thread-1,63
end 36,Thread-1,64
begin 35,Thread-1,64
end 35,Thread-1,65
begin 34,Thread-1,65
end 34,Thread-1,66
begin 33,Thread-1,66
end 33,Thread-1,67
begin 32,Thread-1,67
end 32,Thread-1,68
begin 31,Thread-1,68
end 31,Thread-1,69
begin 30,Thread-1,69
end 30,Thread-1,70
begin 29,Thread-1,70
end 29,Thread-1,71
begin 28,Thread-1,71
end 28,Thread-1,72
begin 27,Thread-1,72
end 27,Thread-1,73
begin 26,Thread-1,73
end 26,Thread-1,74
begin 25,Thread-1,74
end 25,Thread-1,75
begin 24,Thread-1,75
end 24,Thread-1,76
begin 23,Thread-1,76
end 23,Thread-1,77
begin 22,Thread-1,77
end 22,Thread-1,78
begin 21,Thread-1,78
end 21,Thread-1,79
begin 20,Thread-1,79
end 20,Thread-1,80
begin 19,Thread-1,80
end 19,Thread-1,81
begin 18,Thread-1,81
end 18,Thread-1,82
begin 17,Thread-1,82
end 17,Thread-1,83
begin 16,Thread-1,83
end 16,Thread-1,84
begin 15,Thread-1,84
end 15,Thread-1,85
begin 14,Thread-1,85
end 14,Thread-1,86
begin 13,Thread-1,86
end 13,Thread-1,87
begin 12,Thread-1,87
end 12,Thread-1,88
begin 11,Thread-1,88
end 11,Thread-1,89
begin 10,Thread-1,89
end 10,Thread-1,90
begin 9,Thread-1,90
end 9,Thread-1,91
begin 8,Thread-1,91
end 8,Thread-1,92
begin 7,Thread-1,92
end 7,Thread-1,93
begin 6,Thread-1,93
end 6,Thread-1,94
begin 5,Thread-1,94
end 5,Thread-1,95
begin 4,Thread-1,95
end 4,Thread-1,96
begin 3,Thread-1,96
end 3,Thread-1,97
begin 2,Thread-1,97
end 2,Thread-1,98
begin 1,Thread-1,98
end 1,Thread-1,99
begin 0,Thread-1,99
end 0,Thread-1,100
begin 99,Thread-0,100
end 99,Thread-0,101
begin 98,Thread-0,101
end 98,Thread-0,102
begin 97,Thread-0,102
end 97,Thread-0,103
begin 96,Thread-0,103
end 96,Thread-0,104
begin 95,Thread-0,104
end 95,Thread-0,105
begin 94,Thread-0,105
end 94,Thread-0,106
begin 93,Thread-0,106
end 93,Thread-0,107
begin 92,Thread-0,107
end 92,Thread-0,108
begin 91,Thread-0,108
end 91,Thread-0,109
begin 90,Thread-0,109
end 90,Thread-0,110
begin 89,Thread-0,110
end 89,Thread-0,111
begin 88,Thread-0,111
end 88,Thread-0,112
begin 87,Thread-0,112
end 87,Thread-0,113
begin 86,Thread-0,113
end 86,Thread-0,114
begin 85,Thread-0,114
end 85,Thread-0,115
begin 84,Thread-0,115
end 84,Thread-0,116
begin 83,Thread-0,116
end 83,Thread-0,117
begin 82,Thread-0,117
end 82,Thread-0,118
begin 81,Thread-0,118
end 81,Thread-0,119
begin 80,Thread-0,119
end 80,Thread-0,120
begin 79,Thread-0,120
end 79,Thread-0,121
begin 78,Thread-0,121
end 78,Thread-0,122
begin 77,Thread-0,122
end 77,Thread-0,123
begin 76,Thread-0,123
end 76,Thread-0,124
begin 75,Thread-0,124
end 75,Thread-0,125
begin 74,Thread-0,125
end 74,Thread-0,126
begin 73,Thread-0,126
end 73,Thread-0,127
begin 72,Thread-0,127
end 72,Thread-0,128
begin 71,Thread-0,128
end 71,Thread-0,129
begin 70,Thread-0,129
end 70,Thread-0,130
begin 69,Thread-0,130
end 69,Thread-0,131
begin 68,Thread-0,131
end 68,Thread-0,132
begin 67,Thread-0,132
end 67,Thread-0,133
begin 66,Thread-0,133
end 66,Thread-0,134
begin 65,Thread-0,134
end 65,Thread-0,135
begin 64,Thread-0,135
end 64,Thread-0,136
begin 63,Thread-0,136
end 63,Thread-0,137
begin 62,Thread-0,137
end 62,Thread-0,138
begin 61,Thread-0,138
end 61,Thread-0,139
begin 60,Thread-0,139
end 60,Thread-0,140
begin 59,Thread-0,140
end 59,Thread-0,141
begin 58,Thread-0,141
end 58,Thread-0,142
begin 57,Thread-0,142
end 57,Thread-0,143
begin 56,Thread-0,143
end 56,Thread-0,144
begin 55,Thread-0,144
end 55,Thread-0,145
begin 54,Thread-0,145
end 54,Thread-0,146
begin 53,Thread-0,146
end 53,Thread-0,147
begin 52,Thread-0,147
end 52,Thread-0,148
begin 51,Thread-0,148
end 51,Thread-0,149
begin 50,Thread-0,149
end 50,Thread-0,150
begin 49,Thread-0,150
end 49,Thread-0,151
begin 48,Thread-0,151
end 48,Thread-0,152
begin 47,Thread-0,152
end 47,Thread-0,153
begin 46,Thread-0,153
end 46,Thread-0,154
begin 45,Thread-0,154
end 45,Thread-0,155
begin 44,Thread-0,155
end 44,Thread-0,156
begin 43,Thread-0,156
end 43,Thread-0,157
begin 42,Thread-0,157
end 42,Thread-0,158
begin 41,Thread-0,158
end 41,Thread-0,159
begin 40,Thread-0,159
end 40,Thread-0,160
begin 39,Thread-0,160
end 39,Thread-0,161
begin 38,Thread-0,161
end 38,Thread-0,162
begin 37,Thread-0,162
end 37,Thread-0,163
begin 36,Thread-0,163
end 36,Thread-0,164
begin 35,Thread-0,164
end 35,Thread-0,165
begin 34,Thread-0,165
end 34,Thread-0,166
begin 33,Thread-0,166
end 33,Thread-0,167
begin 32,Thread-0,167
end 32,Thread-0,168
begin 31,Thread-0,168
end 31,Thread-0,169
begin 30,Thread-0,169
end 30,Thread-0,170
begin 29,Thread-0,170
end 29,Thread-0,171
begin 28,Thread-0,171
end 28,Thread-0,172
begin 27,Thread-0,172
end 27,Thread-0,173
begin 26,Thread-0,173
end 26,Thread-0,174
begin 25,Thread-0,174
end 25,Thread-0,175
begin 24,Thread-0,175
end 24,Thread-0,176
begin 23,Thread-0,176
end 23,Thread-0,177
begin 22,Thread-0,177
end 22,Thread-0,178
begin 21,Thread-0,178
end 21,Thread-0,179
begin 20,Thread-0,179
end 20,Thread-0,180
begin 19,Thread-0,180
end 19,Thread-0,181
begin 18,Thread-0,181
end 18,Thread-0,182
begin 17,Thread-0,182
end 17,Thread-0,183
begin 16,Thread-0,183
end 16,Thread-0,184
begin 15,Thread-0,184
end 15,Thread-0,185
begin 14,Thread-0,185
end 14,Thread-0,186
begin 13,Thread-0,186
end 13,Thread-0,187
begin 12,Thread-0,187
end 12,Thread-0,188
begin 11,Thread-0,188
end 11,Thread-0,189
begin 10,Thread-0,189
end 10,Thread-0,190
begin 9,Thread-0,190
end 9,Thread-0,191
begin 8,Thread-0,191
end 8,Thread-0,192
begin 7,Thread-0,192
end 7,Thread-0,193
begin 6,Thread-0,193
end 6,Thread-0,194
begin 5,Thread-0,194
end 5,Thread-0,195
begin 4,Thread-0,195
end 4,Thread-0,196
begin 3,Thread-0,196
end 3,Thread-0,197
begin 2,Thread-0,197
end 2,Thread-0,198
begin 1,Thread-0,198
end 1,Thread-0,199
begin 0,Thread-0,199
end 0,Thread-0,200
以上面的代码和运行结果分析:
以上的代码中使用了类锁,类函数是同步函数也就是执行的时候需要获取类锁,线程1和线程2分别调用了类函数,而线程1用synchronize同步占用了类锁,所以线程2一直等到线程1执行结束才拿到类锁运行。而在线程1的内部,setCount调用addCount,虽然这两个函数都需要类锁,setCount先占了类锁,addCount在被调用时是可以共用SetCount占用的锁,也就是在线程内,锁是被共用的。
被synchronize标记的函数如果是类函数则占用的是类锁,如果是对象函数则占用的对象锁,被synchronize标记的代码块可以是类锁也可以是对象锁。