在Java线程中运用synchronized关键字来达到同步的
synchronized可以锁方法,锁类,锁对象,锁代码块
方法锁
1
2
3
4
5
6
7
8
9
|
// 加在方法上面的同步锁是this
public synchronized void print() {
System.out.println( "同步方法" );
try {
Thread.sleep( 3000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
|
类锁
1
2
3
4
5
6
7
8
9
10
11
|
public synchronized void print(String msg) {
// 类锁
synchronized (MyThread. class ) {
System.out.println(msg);
try {
Thread.sleep( 3000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
|
对象锁
以卖火车票为例
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
|
public class Window extends Thread {
public Window(String name) {
super (name);
}
static int tick = 100 ;
static String obj = new String();
@Override
public void run() {
// 开始卖票
while (tick > 0 ) {
// 同步代码块
// 一把锁 钥匙
// 所有的线程 必须在这里排队
synchronized (obj) {
if (tick > 0 ) {
System.out.println(getName() + "卖出了第【" + tick + "】张票" ); // 失去了cpu资源
tick--;
}
}
try {
Thread.sleep( 100 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!