线程同步问题
作者:互联网
/*
编程题 Homework02.java 5min
(1)有2个用户分别从同一个卡上取钱(总额:10000)
(2)每次都取1000,当余额不足时,就不能取款了
(3)不能出现超取现象=》线程同步问题.
*/
package Thread; /* 编程题 Homework02.java 5min (1)有2个用户分别从同一个卡上取钱(总额:10000) (2)每次都取1000,当余额不足时,就不能取款了 (3)不能出现超取现象=》线程同步问题. */ public class HomeWork01 { public static void main(String[] args) { S s = new S(); Thread thread1 = new Thread(s); thread1.setName("张三"); Thread thread2 = new Thread(s); thread2.setName("李四"); thread1.start(); thread2.start(); } } class S implements Runnable{ //总金额10000; private int money =10000; //重写run方法 @Override public void run() { while (true){ /* synchronized代码解读:这里使用sychronized实现线程同步; 当多个线程执行到这里时,就会去抢this对象锁;哪个线程抢到this对象锁,就执行sychronizedd代码块; 执行完以后,会释放this锁,抢不到,就blcoked,准备继续抢; this对象锁时非公平锁; */ synchronized (this){ //判断金额是否还有1000; if (money<1000){ System.out.println("余额不足1000"); break; } money -=1000; System.out.println(Thread.currentThread().getName()+"取了1000元; "+"当前余额:"+money); } //休眠1s try { Thread.sleep(1500); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }
标签:同步,10000,Thread,问题,线程,thread2,thread1,new 来源: https://www.cnblogs.com/nzm-2019/p/16656339.html