在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(); } } } } |
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!