Ubuntu编译glibc库来验证Synchronized锁优化效果
0.前言
当然你可以说通过JOL查看对象的头信息,当然那个也是一种方法,但那个只能说明是这种状态,没有过程,本次主要结合来验证,Synchronized 关键字锁的状态:无锁、偏向锁、轻量级锁、重量级锁
基于Ubuntu16测试成功。18测试失败,centos没有测试
主要是在Java调用系统函数的时候,打印log。但是在Java里面打印线程ID是JVM层面的。需要自己实现一个native方法,在java层面调用。最后对比对应的PID 和TID,发现查看当前线程调用了几次系统锁
Java 的重量级级锁都是通过glibc库的pthread_mutex_lock函数实现的,是在和操作系统级别的锁。
glibc库
glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
- 操作系统底层库
int pthread_mutex_lock(pthread_mutex_t *mutex);
pthread_mutex_lock()返回时,该互斥锁已被锁定。线程调用该函数让互斥锁上锁,如果该互斥锁已被另一个线程锁定和拥有,则调用该线程将阻塞,直到该互斥锁变为可用为止。 对于 Solaris线程,请参见mutex_lock 语法
- 会阻塞
我们可以从JVM 源码中看到调用
ThreadCritical::ThreadCritical
1 | ThreadCritical::ThreadCritical() { |
这个是底层系统库,我们是看不到源码的,只能自己下载。可以在glibc/nptl/phread_mutex_lock.c里看到实现。
我尝试就是在这里函数里加上自己的log
1 | int __pthread_mutex_lock (pthread_mutex_t *mutex) |
1. 查看自己的glibc版本
1 | root@189415df5c51:/lib/x86_64-linux-gnu# pwd |
2.最好下载同一个版本,编译glibc版本
https://ftp.gnu.org/gnu/glibc/?C=M;O=A
目录可以自己变化,但是glibc不让在源码目录下面编译 会报 Makeconfig:42: *** missing separator. Stop
若有必要,可以参考 Linux源码包的一般安装步
1 | mkdir build |
3.修改替换 编译
vim pthread_mutex_lock.c 添加log
1 | fprintf(stdout,"pthread_mutex_lock log PID = %d TID = %lu mutex = %p \n",getpid(),pthread_self(),&mutex); |
4.运行时替换关键库
- 这里需要注意,搞错了,就不能的话,所有命令都可能用不了了
自己主要修改的是pthread库,所以替换系统的pthread库,find一下
- 1.查看 /etc/ld.conf.d/x86-gnu*.conf 下的目录
- 2.因为要替换几个关键文件,直接手动替换会出错,系统库是在动态加载的。copy 一个临时目录,加上了n后缀,做区分。去替换临时目录里面的文件
- 3.例如我的
1 | cp /usr/local/glibc23/lib/libpthread.so /usr/lib/x86_64-linux-gnu-n/libpthread.so |
- 4.修改 /etc/ld.conf.d/x86-gnu*.conf 里面的链接库路径指向临时目录,不用了可以改回
- 5.执行ldconfig,生效
- 6.自己配置java环境
- 基本任命令都会触发这行log
1 | root@189415df5c51:/etc/ld.so.conf.d# ls |
5.编写Java验证
接下来,就是正常jni流程了
JniTool.java
1 | package jnitool; |
这里jnitool必须在 java.library.path这一jvm变量所指向的路径中,
可以通过如下方法获得该变量System.getProperty(“java.library.path”);
生成.h文件,javah -jni jnitool.JniTool
打印java线程的pid和tid,jvm层面
1 |
|
使用make编译
1 | vim makefile |
6. 观察不同的锁
- 主要是对比不同的锁情况下,对操作系统系统锁的调用情况,观察优化效果
- 当然JVM对锁的优化,是调用系统锁的次数越少越好
- 听过系统锁的log,直观对比调用pthread_mutex_lock次数
奇怪的是我在docker里面,修改glibc库后,加上jol打印头信息就会卡
,所以先验证是什么锁的情况下,再打的log
6.1 无锁
1 | public class SyncTest { |
通过log可以看到50次调用,通过搜索tid查看
刚开始和结束调用了系统锁,中间是没有调用系统锁
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
583545: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61e800b728
3546: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61e8100b28
3549: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61e8100b28
3555: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61e80b9228
3562: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61f778b8a0
3563: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61f83d3948
3564: java_lock log-----------PID = 399 TID = 140058569967360
3575: java_lock log-----------PID = 399 TID = 140058569967360
3576: java_lock log-----------PID = 399 TID = 140058569967360
3577: java_lock log-----------PID = 399 TID = 140058569967360
3578: java_lock log-----------PID = 399 TID = 140058569967360
3579: java_lock log-----------PID = 399 TID = 140058569967360
3580: java_lock log-----------PID = 399 TID = 140058569967360
3581: java_lock log-----------PID = 399 TID = 140058569967360
3582: java_lock log-----------PID = 399 TID = 140058569967360
3583: java_lock log-----------PID = 399 TID = 140058569967360
3584: java_lock log-----------PID = 399 TID = 140058569967360
3585: java_lock log-----------PID = 399 TID = 140058569967360
3586: java_lock log-----------PID = 399 TID = 140058569967360
3587: java_lock log-----------PID = 399 TID = 140058569967360
3588: java_lock log-----------PID = 399 TID = 140058569967360
3590: java_lock log-----------PID = 399 TID = 140058569967360
3591: java_lock log-----------PID = 399 TID = 140058569967360
3592: java_lock log-----------PID = 399 TID = 140058569967360
3593: java_lock log-----------PID = 399 TID = 140058569967360
3594: java_lock log-----------PID = 399 TID = 140058569967360
3595: java_lock log-----------PID = 399 TID = 140058569967360
3596: java_lock log-----------PID = 399 TID = 140058569967360
3597: java_lock log-----------PID = 399 TID = 140058569967360
3598: java_lock log-----------PID = 399 TID = 140058569967360
3599: java_lock log-----------PID = 399 TID = 140058569967360
3600: java_lock log-----------PID = 399 TID = 140058569967360
3601: java_lock log-----------PID = 399 TID = 140058569967360
3602: java_lock log-----------PID = 399 TID = 140058569967360
3603: java_lock log-----------PID = 399 TID = 140058569967360
3604: java_lock log-----------PID = 399 TID = 140058569967360
3605: java_lock log-----------PID = 399 TID = 140058569967360
3606: java_lock log-----------PID = 399 TID = 140058569967360
3607: java_lock log-----------PID = 399 TID = 140058569967360
3608: java_lock log-----------PID = 399 TID = 140058569967360
3609: java_lock log-----------PID = 399 TID = 140058569967360
3610: java_lock log-----------PID = 399 TID = 140058569967360
3611: java_lock log-----------PID = 399 TID = 140058569967360
3612: java_lock log-----------PID = 399 TID = 140058569967360
3613: java_lock log-----------PID = 399 TID = 140058569967360
3614: java_lock log-----------PID = 399 TID = 140058569967360
3615: java_lock log-----------PID = 399 TID = 140058569967360
3616: java_lock log-----------PID = 399 TID = 140058569967360
3617: java_lock log-----------PID = 399 TID = 140058569967360
3618: java_lock log-----------PID = 399 TID = 140058569967360
3619: java_lock log-----------PID = 399 TID = 140058569967360
3620: java_lock log-----------PID = 399 TID = 140058569967360
3621: java_lock log-----------PID = 399 TID = 140058569967360
3622: java_lock log-----------PID = 399 TID = 140058569967360
3623: java_lock log-----------PID = 399 TID = 140058569967360
3624: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61e800b528
3625: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61f77a32c0
3626: pthread_mutex_lock log PID = 399 TID = 140058569967360 mutex=0x7f61f77a32c06.2 偏向锁
偏向锁是默认延时加载的
我们可以加JVM参数或sleep
通过上面的代码,加上 Thread.sleep(5000);确保偏向锁打开
查看输出, 效果如上
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
623742: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c800b728
3743: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c80e9128
3750: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c80e9128
3752: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c80b9228
3763: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25cffe18a0
3764: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25d4c8b948
3765: java_lock log-----------PID = 431 TID = 139799890413312
3772: java_lock log-----------PID = 431 TID = 139799890413312
3773: java_lock log-----------PID = 431 TID = 139799890413312
3774: java_lock log-----------PID = 431 TID = 139799890413312
3775: java_lock log-----------PID = 431 TID = 139799890413312
3776: java_lock log-----------PID = 431 TID = 139799890413312
3777: java_lock log-----------PID = 431 TID = 139799890413312
3778: java_lock log-----------PID = 431 TID = 139799890413312
3779: java_lock log-----------PID = 431 TID = 139799890413312
3780: java_lock log-----------PID = 431 TID = 139799890413312
3781: java_lock log-----------PID = 431 TID = 139799890413312
3782: java_lock log-----------PID = 431 TID = 139799890413312
3783: java_lock log-----------PID = 431 TID = 139799890413312
3785: java_lock log-----------PID = 431 TID = 139799890413312
3787: java_lock log-----------PID = 431 TID = 139799890413312
3788: java_lock log-----------PID = 431 TID = 139799890413312
3789: java_lock log-----------PID = 431 TID = 139799890413312
3790: java_lock log-----------PID = 431 TID = 139799890413312
3791: java_lock log-----------PID = 431 TID = 139799890413312
3792: java_lock log-----------PID = 431 TID = 139799890413312
3793: java_lock log-----------PID = 431 TID = 139799890413312
3794: java_lock log-----------PID = 431 TID = 139799890413312
3795: java_lock log-----------PID = 431 TID = 139799890413312
3796: java_lock log-----------PID = 431 TID = 139799890413312
3797: java_lock log-----------PID = 431 TID = 139799890413312
3798: java_lock log-----------PID = 431 TID = 139799890413312
3799: java_lock log-----------PID = 431 TID = 139799890413312
3800: java_lock log-----------PID = 431 TID = 139799890413312
3801: java_lock log-----------PID = 431 TID = 139799890413312
3802: java_lock log-----------PID = 431 TID = 139799890413312
3803: java_lock log-----------PID = 431 TID = 139799890413312
3804: java_lock log-----------PID = 431 TID = 139799890413312
3805: java_lock log-----------PID = 431 TID = 139799890413312
3806: java_lock log-----------PID = 431 TID = 139799890413312
3807: java_lock log-----------PID = 431 TID = 139799890413312
3808: java_lock log-----------PID = 431 TID = 139799890413312
3809: java_lock log-----------PID = 431 TID = 139799890413312
3810: java_lock log-----------PID = 431 TID = 139799890413312
3811: java_lock log-----------PID = 431 TID = 139799890413312
3812: java_lock log-----------PID = 431 TID = 139799890413312
3813: java_lock log-----------PID = 431 TID = 139799890413312
3814: java_lock log-----------PID = 431 TID = 139799890413312
3815: java_lock log-----------PID = 431 TID = 139799890413312
3816: java_lock log-----------PID = 431 TID = 139799890413312
3817: java_lock log-----------PID = 431 TID = 139799890413312
3818: java_lock log-----------PID = 431 TID = 139799890413312
3819: java_lock log-----------PID = 431 TID = 139799890413312
3820: java_lock log-----------PID = 431 TID = 139799890413312
3821: java_lock log-----------PID = 431 TID = 139799890413312
3822: java_lock log-----------PID = 431 TID = 139799890413312
3823: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c8079528
3824: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c80e9128
3828: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c80e9128
3829: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25c800b528
3830: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25cfff92c0
3831: pthread_mutex_lock log PID = 431 TID = 139799890413312 mutex=0x7f25cfff92c0
6.3 轻量级锁
- 我们偏向锁,升级到轻量级锁
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
56public class SyncTest {
//测试锁
final Object lock = new Object();
//获取pthread tid
JniTool jniTool = new JniTool();
public static void main(String[] args) throws InterruptedException {
//打开就是默认的偏向锁,默认是可偏向状态,但是不偏向任何一个线程
//不打开,默认就是无所的状态
Thread.sleep(5000);
SyncTest test = new SyncTest();
// test.parseHeaderInfo((ClassLayout.parseInstance(test.lock).toPrintable()));
System.out.println("---------------------------start--------------------");
test.start();
}
public void start() throws InterruptedException {
Runnable runnable = new Runnable() {
public void run() {
int count = 0;
System.out.println(Thread.currentThread().getName() + " start");
while (true) {
if (count < 50) {
count++;
} else {
//若线程没有结束,但是线程1放锁了,升级为轻量级锁
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return;
}
try {
lock();
// parseHeaderInfo(ClassLayout.parseInstance(lock).toPrintable());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
new Thread(runnable).start();
//加上,保证线程1结束,若果线程1已经结束,则还是偏向锁
//若线程没有结束,但是线程1放锁了,升级为轻量级锁
Thread.sleep(2000);
//不加,则会升级为重量级锁
new Thread(runnable).start();
}
public void lock() throws InterruptedException {
synchronized (lock) {
jniTool.getThreadID();
}
}
}
- out.log
- 线程1的时候偏向
- 线程2的时候,升级到轻量级锁
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
1143763: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43cc00b728
3764: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43cc108d28
3768: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43cc108d28
3769: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43cc0bba28
3774: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43d3fe18a0
3775: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43d9bea948
3777: java_lock log-----------PID = 498 TID = 139928822331136
3789: java_lock log-----------PID = 498 TID = 139928822331136
3790: java_lock log-----------PID = 498 TID = 139928822331136
3791: java_lock log-----------PID = 498 TID = 139928822331136
3792: java_lock log-----------PID = 498 TID = 139928822331136
3793: java_lock log-----------PID = 498 TID = 139928822331136
3794: java_lock log-----------PID = 498 TID = 139928822331136
3795: java_lock log-----------PID = 498 TID = 139928822331136
3796: java_lock log-----------PID = 498 TID = 139928822331136
3797: java_lock log-----------PID = 498 TID = 139928822331136
3798: java_lock log-----------PID = 498 TID = 139928822331136
3799: java_lock log-----------PID = 498 TID = 139928822331136
3800: java_lock log-----------PID = 498 TID = 139928822331136
3801: java_lock log-----------PID = 498 TID = 139928822331136
3802: java_lock log-----------PID = 498 TID = 139928822331136
3803: java_lock log-----------PID = 498 TID = 139928822331136
3804: java_lock log-----------PID = 498 TID = 139928822331136
3805: java_lock log-----------PID = 498 TID = 139928822331136
3806: java_lock log-----------PID = 498 TID = 139928822331136
3807: java_lock log-----------PID = 498 TID = 139928822331136
3808: java_lock log-----------PID = 498 TID = 139928822331136
3809: java_lock log-----------PID = 498 TID = 139928822331136
3810: java_lock log-----------PID = 498 TID = 139928822331136
3811: java_lock log-----------PID = 498 TID = 139928822331136
3812: java_lock log-----------PID = 498 TID = 139928822331136
3813: java_lock log-----------PID = 498 TID = 139928822331136
3814: java_lock log-----------PID = 498 TID = 139928822331136
3815: java_lock log-----------PID = 498 TID = 139928822331136
3816: java_lock log-----------PID = 498 TID = 139928822331136
3817: java_lock log-----------PID = 498 TID = 139928822331136
3818: java_lock log-----------PID = 498 TID = 139928822331136
3819: java_lock log-----------PID = 498 TID = 139928822331136
3820: java_lock log-----------PID = 498 TID = 139928822331136
3822: java_lock log-----------PID = 498 TID = 139928822331136
3824: java_lock log-----------PID = 498 TID = 139928822331136
3825: java_lock log-----------PID = 498 TID = 139928822331136
3826: java_lock log-----------PID = 498 TID = 139928822331136
3827: java_lock log-----------PID = 498 TID = 139928822331136
3828: java_lock log-----------PID = 498 TID = 139928822331136
3829: java_lock log-----------PID = 498 TID = 139928822331136
3830: java_lock log-----------PID = 498 TID = 139928822331136
3831: java_lock log-----------PID = 498 TID = 139928822331136
3832: java_lock log-----------PID = 498 TID = 139928822331136
3833: java_lock log-----------PID = 498 TID = 139928822331136
3834: java_lock log-----------PID = 498 TID = 139928822331136
3835: java_lock log-----------PID = 498 TID = 139928822331136
3836: java_lock log-----------PID = 498 TID = 139928822331136
3837: java_lock log-----------PID = 498 TID = 139928822331136
3838: java_lock log-----------PID = 498 TID = 139928822331136
3839: java_lock log-----------PID = 498 TID = 139928822331136
3840: pthread_mutex_lock log PID = 498 TID = 139928822331136 mutex=0x7f43cc108b28
3932: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc00b728
3933: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc0dd228
3938: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc0dd228
3942: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc079528
3945: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc079528
3950: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc079528
3953: java_lock log-----------PID = 498 TID = 139928821278464
3954: java_lock log-----------PID = 498 TID = 139928821278464
3955: java_lock log-----------PID = 498 TID = 139928821278464
3956: java_lock log-----------PID = 498 TID = 139928821278464
3957: java_lock log-----------PID = 498 TID = 139928821278464
3958: java_lock log-----------PID = 498 TID = 139928821278464
3959: java_lock log-----------PID = 498 TID = 139928821278464
3960: java_lock log-----------PID = 498 TID = 139928821278464
3961: java_lock log-----------PID = 498 TID = 139928821278464
3962: java_lock log-----------PID = 498 TID = 139928821278464
3963: java_lock log-----------PID = 498 TID = 139928821278464
3964: java_lock log-----------PID = 498 TID = 139928821278464
3965: java_lock log-----------PID = 498 TID = 139928821278464
3966: java_lock log-----------PID = 498 TID = 139928821278464
3967: java_lock log-----------PID = 498 TID = 139928821278464
3968: java_lock log-----------PID = 498 TID = 139928821278464
3969: java_lock log-----------PID = 498 TID = 139928821278464
3970: java_lock log-----------PID = 498 TID = 139928821278464
3971: java_lock log-----------PID = 498 TID = 139928821278464
3972: java_lock log-----------PID = 498 TID = 139928821278464
3973: java_lock log-----------PID = 498 TID = 139928821278464
3974: java_lock log-----------PID = 498 TID = 139928821278464
3975: java_lock log-----------PID = 498 TID = 139928821278464
3976: java_lock log-----------PID = 498 TID = 139928821278464
3977: java_lock log-----------PID = 498 TID = 139928821278464
3978: java_lock log-----------PID = 498 TID = 139928821278464
3979: java_lock log-----------PID = 498 TID = 139928821278464
3980: java_lock log-----------PID = 498 TID = 139928821278464
3981: java_lock log-----------PID = 498 TID = 139928821278464
3982: java_lock log-----------PID = 498 TID = 139928821278464
3983: java_lock log-----------PID = 498 TID = 139928821278464
3984: java_lock log-----------PID = 498 TID = 139928821278464
3985: java_lock log-----------PID = 498 TID = 139928821278464
3986: java_lock log-----------PID = 498 TID = 139928821278464
3987: java_lock log-----------PID = 498 TID = 139928821278464
3988: java_lock log-----------PID = 498 TID = 139928821278464
3989: java_lock log-----------PID = 498 TID = 139928821278464
3990: java_lock log-----------PID = 498 TID = 139928821278464
3991: java_lock log-----------PID = 498 TID = 139928821278464
3992: java_lock log-----------PID = 498 TID = 139928821278464
3993: java_lock log-----------PID = 498 TID = 139928821278464
3994: java_lock log-----------PID = 498 TID = 139928821278464
3995: java_lock log-----------PID = 498 TID = 139928821278464
3996: java_lock log-----------PID = 498 TID = 139928821278464
3997: java_lock log-----------PID = 498 TID = 139928821278464
3998: java_lock log-----------PID = 498 TID = 139928821278464
3999: java_lock log-----------PID = 498 TID = 139928821278464
4000: java_lock log-----------PID = 498 TID = 139928821278464
4001: java_lock log-----------PID = 498 TID = 139928821278464
4002: java_lock log-----------PID = 498 TID = 139928821278464
4003: pthread_mutex_lock log PID = 498 TID = 139928821278464 mutex=0x7f43cc0dd028
6.4 重量级锁
- 上面的代码,我们2个线程不等待,直接启动
- 则会再偏向锁的情况下,直接升级到重量级锁
可以明显看到 系统锁的调用测试变多
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
2613750: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029000b728
3751: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f0290108c28
3756: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f0290108c28
3758: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029000b728
3759: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f02900b9228
3760: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a528
3770: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a528
3775: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029d4b28a0
3776: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029e0fa948
3778: java_lock log-----------PID = 532 TID = 139648716183296
3784: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f0290079528
3785: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a528
3796: java_lock log-----------PID = 532 TID = 139648716183296
3797: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a528
3798: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3799: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3800: java_lock log-----------PID = 532 TID = 139648716183296
3801: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3802: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3803: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3804: java_lock log-----------PID = 532 TID = 139648716183296
3805: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3806: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3807: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3808: java_lock log-----------PID = 532 TID = 139648716183296
3809: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3810: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3811: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3812: java_lock log-----------PID = 532 TID = 139648716183296
3813: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3814: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3815: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3816: java_lock log-----------PID = 532 TID = 139648716183296
3817: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3818: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3819: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3820: java_lock log-----------PID = 532 TID = 139648716183296
3821: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3822: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3823: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3824: java_lock log-----------PID = 532 TID = 139648716183296
3825: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3826: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3827: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3828: java_lock log-----------PID = 532 TID = 139648716183296
3829: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3830: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3831: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3832: java_lock log-----------PID = 532 TID = 139648716183296
3833: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3834: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3835: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3836: java_lock log-----------PID = 532 TID = 139648716183296
3837: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3838: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3839: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3840: java_lock log-----------PID = 532 TID = 139648716183296
3841: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3842: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3843: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3844: java_lock log-----------PID = 532 TID = 139648716183296
3845: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3846: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3847: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3848: java_lock log-----------PID = 532 TID = 139648716183296
3849: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3850: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3851: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3852: java_lock log-----------PID = 532 TID = 139648716183296
3853: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3854: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3855: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3856: java_lock log-----------PID = 532 TID = 139648716183296
3857: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3858: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3859: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3860: java_lock log-----------PID = 532 TID = 139648716183296
3861: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3862: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3863: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3864: java_lock log-----------PID = 532 TID = 139648716183296
3865: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3866: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3867: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3868: java_lock log-----------PID = 532 TID = 139648716183296
3869: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3870: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3871: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3872: java_lock log-----------PID = 532 TID = 139648716183296
3873: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3874: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3875: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3876: java_lock log-----------PID = 532 TID = 139648716183296
3877: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3878: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3879: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3880: java_lock log-----------PID = 532 TID = 139648716183296
3881: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3882: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3883: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3884: java_lock log-----------PID = 532 TID = 139648716183296
3885: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3886: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3887: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3888: java_lock log-----------PID = 532 TID = 139648716183296
3889: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3890: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3891: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3892: java_lock log-----------PID = 532 TID = 139648716183296
3893: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3894: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3895: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3896: java_lock log-----------PID = 532 TID = 139648716183296
3897: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3898: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3899: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3900: java_lock log-----------PID = 532 TID = 139648716183296
3901: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3902: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3903: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3904: java_lock log-----------PID = 532 TID = 139648716183296
3905: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3906: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3907: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3908: java_lock log-----------PID = 532 TID = 139648716183296
3909: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3910: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3911: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3912: java_lock log-----------PID = 532 TID = 139648716183296
3913: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3914: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3915: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3916: java_lock log-----------PID = 532 TID = 139648716183296
3917: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3918: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3919: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3920: java_lock log-----------PID = 532 TID = 139648716183296
3921: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3922: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3923: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3924: java_lock log-----------PID = 532 TID = 139648716183296
3925: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3926: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3927: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3928: java_lock log-----------PID = 532 TID = 139648716183296
3929: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3930: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3931: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3932: java_lock log-----------PID = 532 TID = 139648716183296
3933: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3934: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3935: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3936: java_lock log-----------PID = 532 TID = 139648716183296
3937: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3938: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3939: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3940: java_lock log-----------PID = 532 TID = 139648716183296
3941: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3942: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3943: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3944: java_lock log-----------PID = 532 TID = 139648716183296
3945: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3946: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3947: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3948: java_lock log-----------PID = 532 TID = 139648716183296
3949: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3950: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3951: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3952: java_lock log-----------PID = 532 TID = 139648716183296
3953: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3954: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3955: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3956: java_lock log-----------PID = 532 TID = 139648716183296
3957: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3958: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3959: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3960: java_lock log-----------PID = 532 TID = 139648716183296
3961: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3962: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3963: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3964: java_lock log-----------PID = 532 TID = 139648716183296
3965: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3966: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3967: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3968: java_lock log-----------PID = 532 TID = 139648716183296
3969: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3970: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3971: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3972: java_lock log-----------PID = 532 TID = 139648716183296
3973: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3974: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3975: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3976: java_lock log-----------PID = 532 TID = 139648716183296
3977: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3978: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3979: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3980: java_lock log-----------PID = 532 TID = 139648716183296
3981: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3982: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3983: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3984: java_lock log-----------PID = 532 TID = 139648716183296
3985: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3986: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3987: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3988: java_lock log-----------PID = 532 TID = 139648716183296
3989: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3990: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3991: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f029010a128
3992: pthread_mutex_lock log PID = 532 TID = 139648716183296 mutex=0x7f0290108a28
3993: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a128
3994: java_lock log-----------PID = 532 TID = 139648647034624
3995: java_lock log-----------PID = 532 TID = 139648647034624
3996: java_lock log-----------PID = 532 TID = 139648647034624
3997: java_lock log-----------PID = 532 TID = 139648647034624
3998: java_lock log-----------PID = 532 TID = 139648647034624
3999: java_lock log-----------PID = 532 TID = 139648647034624
4000: java_lock log-----------PID = 532 TID = 139648647034624
4001: java_lock log-----------PID = 532 TID = 139648647034624
4002: java_lock log-----------PID = 532 TID = 139648647034624
4003: java_lock log-----------PID = 532 TID = 139648647034624
4004: java_lock log-----------PID = 532 TID = 139648647034624
4005: java_lock log-----------PID = 532 TID = 139648647034624
4006: java_lock log-----------PID = 532 TID = 139648647034624
4007: java_lock log-----------PID = 532 TID = 139648647034624
4008: java_lock log-----------PID = 532 TID = 139648647034624
4009: java_lock log-----------PID = 532 TID = 139648647034624
4010: java_lock log-----------PID = 532 TID = 139648647034624
4011: java_lock log-----------PID = 532 TID = 139648647034624
4012: java_lock log-----------PID = 532 TID = 139648647034624
4013: java_lock log-----------PID = 532 TID = 139648647034624
4014: java_lock log-----------PID = 532 TID = 139648647034624
4015: java_lock log-----------PID = 532 TID = 139648647034624
4016: java_lock log-----------PID = 532 TID = 139648647034624
4017: java_lock log-----------PID = 532 TID = 139648647034624
4018: java_lock log-----------PID = 532 TID = 139648647034624
4019: java_lock log-----------PID = 532 TID = 139648647034624
4020: java_lock log-----------PID = 532 TID = 139648647034624
4021: java_lock log-----------PID = 532 TID = 139648647034624
4022: java_lock log-----------PID = 532 TID = 139648647034624
4023: java_lock log-----------PID = 532 TID = 139648647034624
4024: java_lock log-----------PID = 532 TID = 139648647034624
4025: java_lock log-----------PID = 532 TID = 139648647034624
4026: java_lock log-----------PID = 532 TID = 139648647034624
4027: java_lock log-----------PID = 532 TID = 139648647034624
4028: java_lock log-----------PID = 532 TID = 139648647034624
4029: java_lock log-----------PID = 532 TID = 139648647034624
4030: java_lock log-----------PID = 532 TID = 139648647034624
4031: java_lock log-----------PID = 532 TID = 139648647034624
4032: java_lock log-----------PID = 532 TID = 139648647034624
4033: java_lock log-----------PID = 532 TID = 139648647034624
4034: java_lock log-----------PID = 532 TID = 139648647034624
4035: java_lock log-----------PID = 532 TID = 139648647034624
4036: java_lock log-----------PID = 532 TID = 139648647034624
4037: java_lock log-----------PID = 532 TID = 139648647034624
4038: java_lock log-----------PID = 532 TID = 139648647034624
4039: java_lock log-----------PID = 532 TID = 139648647034624
4040: java_lock log-----------PID = 532 TID = 139648647034624
4041: java_lock log-----------PID = 532 TID = 139648647034624
4042: java_lock log-----------PID = 532 TID = 139648647034624
4043: java_lock log-----------PID = 532 TID = 139648647034624
4044: pthread_mutex_lock log PID = 532 TID = 139648647034624 mutex=0x7f029010a3287 总结
无锁,偏向锁,轻量级锁,本质上都JVM层面的锁,除了开始和结束的时候,没有调用系统锁。
重量级锁是需要 系统锁 pthread_mutex_lock 支持的
每个线程50次调用,系统锁的调用次数,我们包括开始和结束
无锁 | 偏向 | 轻量级 | 重量级 | |
---|---|---|---|---|
线程数量 | 1 | 1 | 2 | 2 |
pthread_mutex_lock 调用次数 | 12 次 | 12次 | 14 次 | 161次 |
- 对比 轻量级锁和 重量级锁还是 优化比较大的
8 docker 镜像
如果有需要, 上面
- docker pull registry.cn-hangzhou.aliyuncs.com/kaiattrib/test:ubuntu16_glibc23
- 带 jdk
- 带 glibc23 源码,可编译
- 带 自己写的一个jni调用库