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在线读书与分享论坛系统