Java多线程练习题(三):轮流取数
(1)有两个用户分别从同一个卡取钱(总额:10000) (2)每次都取1000,当余额不足时,就不能取款了 (3)不能出现超取现象=》线程同步问题
public class demo9 {
/*(1)有两个用户分别从同一个卡取钱(总额:10000)
(2)每次都取1000,当余额不足时,就不能取款了
(3)不能出现超取现象=》线程同步问题*/
public static void main(String[] args) {
Ticker ticker = new Ticker();
Thread thread1 = new Thread(ticker,"t1");
Thread thread2 = new Thread(ticker,"t2");
thread1.start();
thread2.start();
}
}
class Ticker implements Runnable {
private Integer picker = 10000;
private boolean loop = true;
@Override
public void run() {
while (loop) {
//1.这里使用synchronized实现了线程同步
//2.当多个线程执行到这里时,就会去争夺this对象锁
//3.哪个线程争夺(获取)this对象锁,就执行synchronized代码块,执行完成就会释放this对象
//4.争夺不到this对象锁,就blocked,准备继续争夺
synchronized (this) {
if (picker - 1000 < 0) {
loop = false;
break;
}
picker -= 1000;
System.out.println(Thread.currentThread().getName() + "消费了1000,剩余" + picker);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
下一篇:
java ssm在线读书与分享论坛系统
