要求
- public static void main(String[] args) {
- BankChoic bankChoic = new BankChoic();
- Thread thread1 = new Thread(bankChoic);
- thread1.setName("取款1号");
- Thread thread2 = new Thread(bankChoic);
- thread2.setName("取款2号");
- //线程启动
- thread1.start();
- thread2.start();
- }
- }
-
- class BankChoic implements Runnable {
- private static int money = 10000;
-
- /**
- * 1.这里使用 synchronized 实现了线程同步
- * 2.当多个线程执行到这里时,就会争夺 this 对象锁
- * 2.哪个线程争夺到(获取) this 对象锁,就执行synthronized 代码块 ,执行完毕后,就会释放 this 对象锁
- * 4.争夺不到 this 的对象锁,就会 blocked ,准备继续争夺
- */
- @Override
- public /*synchronized*/ void run() {
- while (true) {
- synchronized (this) {
- if (money < 0) {
- System.out.println("余额不足!");
- break;
- }
- money -= 1000;
- System.out.println("取款线程:" + Thread.currentThread().getName() + "\t剩余金额:" + money + "元");
- }
-
- //休眠1s
- try {
- Thread.sleep(1500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- if (money == 0) {
- break;
- }
- }
- System.out.println("线程已经结束~");
- }
- }
1.这里使用 synchronized 实现了线程同步
2.当多个线程执行到这里时,就会争夺 this 对象锁
3.哪个线程争夺到(获取) this 对象锁,就执行synthronized 代码块 ,执行完毕后,就会释放 this 对象锁
4.争夺不到 this 的对象锁,就会 blocked ,准备继续争夺
5.this 对象锁是一个非公平锁