标签:同步 10000 Thread 问题 线程 thread2 thread1 new
/*
编程题 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。