java多线程之Runnable同时执行同一资源实例
来源:互联网 发布:php选择题答题系统 编辑:程序博客网 时间:2024/06/09 14:39
这是个卖票实例,采用多线程,模拟不同窗口来卖票,票数是共同资源。
piao.java
package tong;public class piao implements Runnable { private static int count = 10; @Override public void run() { while (count > 0) { try { Thread.sleep(23); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (this) { if (count > 0) { count--; System.out.println(Thread.currentThread().getName() + "卖出一张票,票还剩" + count); } } } }}
chuangkou.java
package tong;public class chuangkou {public static void main(String[] args) { piao piao =new piao(); Thread thread1 =new Thread(piao,"窗口1"); Thread thread2 =new Thread(piao,"窗口2"); Thread thread3 =new Thread(piao,"窗口3"); Thread thread4 =new Thread(piao,"窗口4"); thread1.start(); thread2.start(); thread3.start(); thread4.start();} }
开启四个窗口同时卖票,结果如下
窗口4卖出一张票,票还剩9窗口1卖出一张票,票还剩8窗口2卖出一张票,票还剩7窗口3卖出一张票,票还剩6窗口2卖出一张票,票还剩5窗口1卖出一张票,票还剩4窗口3卖出一张票,票还剩3窗口4卖出一张票,票还剩2窗口4卖出一张票,票还剩1窗口1卖出一张票,票还剩0
多线程Runnable同时执行同一资源,必须考虑代码的原子性,对于初学者来说,线程访问的随机性,以及资源的分配有时分不清,初学者学一下java的原子性,可见性,有序性。就对这些问题清清楚楚了。
还有第一个程序piao.java,大家考虑两个问题
第一:把if (count>0){}去掉的结果
窗口3卖出一张票,票还剩9窗口2卖出一张票,票还剩8窗口1卖出一张票,票还剩7窗口4卖出一张票,票还剩6窗口4卖出一张票,票还剩5窗口3卖出一张票,票还剩4窗口2卖出一张票,票还剩3窗口1卖出一张票,票还剩2窗口3卖出一张票,票还剩1窗口1卖出一张票,票还剩0窗口2卖出一张票,票还剩-1窗口4卖出一张票,票还剩-2窗口3卖出一张票,票还剩-3
这个是思考线程的控制
第二:保持第一步。然后把synchronized改成把while(count>0)括住
窗口1卖出一张票,票还剩9窗口1卖出一张票,票还剩8窗口1卖出一张票,票还剩7窗口1卖出一张票,票还剩6窗口1卖出一张票,票还剩5窗口1卖出一张票,票还剩4窗口1卖出一张票,票还剩3窗口1卖出一张票,票还剩2窗口1卖出一张票,票还剩1窗口1卖出一张票,票还剩0
这个是思考原子性的范围
阅读全文
1 0
- java多线程之Runnable同时执行同一资源实例
- java多线程之Runnable
- Java 多线程同时执行
- java多线程Runnable入门实例
- java 之 多线程Runnable 示例
- java多线程之引入Runnable
- JAVA多线程之Thread&&Runnable
- Java多线程编程之Runnable、Thread简介
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- Java多线程 之 Runnable Thread (一)
- JAVA多线程之Runnable和Thread比较
- JAVA多线程之Runnable和Thread比较
- JAVA多线程不安全问题解决方案(多线程并发同一资源)。
- Java多线程同时启动或执行
- java多线程runnable 和Thread到购票实例
- JAVA 几种多线程的简单实例 Thread Runnable
- java多线程---Thread和Runnable简单实例
- 技术的本质 读书笔记
- 机器学习10大经典算法
- 2017"百度之星"程序设计大赛
- 2017 百度之星A轮初赛(小C的倍数问题, 今夕何夕, 度度熊的01世界)
- Codeforces 835A Key races (水题)
- java多线程之Runnable同时执行同一资源实例
- 【TX1学习与开发系列】如何快速部署多个tx1系统(超细节版)(五)
- servlet中文乱码问题总结
- JAVA第一天
- 数据结构-队列
- python之全局变量操作
- Codeforces 835B The number on the board (贪心)
- conda命令行使用
- JAVA第二天