Skip to content

Commit e45b4c4

Browse files
author
cicadasmile
committed
Java并发:悲观锁和乐观锁机制
1 parent edf61c1 commit e45b4c4

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.multy.thread.block05lock01;
2+
3+
public class LockThread01 {
4+
public static void main(String[] args) {
5+
CountAdd countAdd = new CountAdd() ;
6+
AddThread01 addThread01 = new AddThread01(countAdd) ;
7+
addThread01.start();
8+
AddThread02 varThread02 = new AddThread02(countAdd) ;
9+
varThread02.start();
10+
}
11+
}
12+
class AddThread01 extends Thread {
13+
private CountAdd countAdd ;
14+
public AddThread01 (CountAdd countAdd){
15+
this.countAdd = countAdd ;
16+
}
17+
@Override
18+
public void run() {
19+
countAdd.countAdd(30);
20+
}
21+
}
22+
class AddThread02 extends Thread {
23+
private CountAdd countAdd ;
24+
public AddThread02 (CountAdd countAdd){
25+
this.countAdd = countAdd ;
26+
}
27+
@Override
28+
public void run() {
29+
countAdd.countAdd(10);
30+
}
31+
}
32+
class CountAdd {
33+
private Integer count = 0 ;
34+
public void countAdd (Integer num){
35+
try {
36+
if (num == 30){
37+
count = count + 50 ;
38+
Thread.sleep(3000);
39+
} else {
40+
count = count + num ;
41+
}
42+
System.out.println("num="+num+";count="+count);
43+
} catch (Exception e){
44+
e.printStackTrace();
45+
}
46+
}
47+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.multy.thread.block05lock01;
2+
3+
import java.util.concurrent.locks.Lock;
4+
import java.util.concurrent.locks.ReentrantLock;
5+
6+
public class LockThread02 {
7+
public static void main(String[] args) {
8+
LockNum lockNum = new LockNum() ;
9+
LockThread lockThread1 = new LockThread(lockNum,"TH1");
10+
LockThread lockThread2 = new LockThread(lockNum,"TH2");
11+
LockThread lockThread3 = new LockThread(lockNum,"TH3");
12+
lockThread1.start();
13+
lockThread2.start();
14+
lockThread3.start();
15+
}
16+
}
17+
class LockNum {
18+
private Lock lock = new ReentrantLock() ;
19+
public void getNum (){
20+
lock.lock();
21+
try {
22+
for (int i = 0 ; i < 3 ; i++){
23+
System.out.println("ThreadName:"+Thread.currentThread().getName()+";i="+i);
24+
}
25+
} finally {
26+
lock.unlock();
27+
}
28+
}
29+
}
30+
class LockThread extends Thread {
31+
private LockNum lockNum ;
32+
public LockThread (LockNum lockNum,String name){
33+
this.lockNum = lockNum ;
34+
super.setName(name);
35+
}
36+
@Override
37+
public void run() {
38+
lockNum.getNum();
39+
}
40+
}

0 commit comments

Comments
 (0)