理解synchronize关键词

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标记的代码块可以是类锁也可以是对象锁。

java synchronized关键字的用法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值