Java多线程探究-多线程安全问题

来源:互联网 发布:个性婚纱知乎 编辑:程序博客网 时间:2024/06/08 19:32

接着Java多线程买票的程序来说

class MyRunnable implements  Runnable{    private  int ticket =100;    public  void  run() {        while(true){            if(ticket>0){                System.out.println(Thread.currentThread().getName()+"sale  "+ticket--);                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }else{                break;            }        }    }}
public class ThreadDemo{    public static void main(String[] args) {        Runnable runnable = new MyRunnable();        Thread th1 = new Thread(runnable);        Thread th2 = new Thread(runnable);        Thread th3 = new Thread(runnable);        Thread th4 = new Thread(runnable);        Thread th5 = new Thread(runnable);        th1.start();        th2.start();        th3.start();        th4.start();        th5.start();    }}

按我们的设计原则,应该是从100到0张打印票数,但是我们来看输出结果
这里写图片描述
可以看到,线程3和线程2同时卖出了第44张票,显然是不对的,再运行一次可能会打印出-1,-2错票
这里写图片描述

这就出现了线程共享的安全问题
怎么解决线程安全呢,请看另一篇博客多线程同步
http://blog.csdn.net/daiyutage/article/details/70050996

0 0
原创粉丝点击