关闭

java多线程之Runnable同时执行同一资源实例

标签: java多线程实例Runnable
30人阅读 评论(0) 收藏 举报
分类:

这是个卖票实例,采用多线程,模拟不同窗口来卖票,票数是共同资源。

 

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

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2050次
    • 积分:273
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条