A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 追梦天涯33 中级黑马   /  2015-8-27 23:52  /  302 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast3;
/*
* 线程安全问题:车站卖票
*
* 线程安全问题的出现前提:
* 线程随机访问性
* 有多个线程并行
* 多个线程有共享数据
* 多个线程操作了共享数据
*
* 解决办法:
*         原子性操作:
                在执行操作时,我们把一个完整动作可以称为一个原子性操作,是一个不可切割的动作。即不可被线程打断的操作
        只需要将一个完整的卖票动作看做一个原子性动作即可。
       
        java同步关键字:synchronized
        同步代码块格式:
                synchronized(锁对象){//该对象可以是任意对象
                        需要同步的代码;
                }
        锁对象:几个线程需要使用相同的锁对象进行同步操作,使用不同的锁是无法完成同步操作的。  任意对象都可以当锁。
*/
public class Demo01_Thread {

        public static void main(String[] args) {
               
                //创建线程执行目标类对象
                Tickets tickets = new Tickets();
               
                //使用线程执行目标类对象创建线程对象
                Thread t = new Thread(tickets,"粪粪");
                Thread t2 = new Thread(tickets,"念念");
                Thread t3 = new Thread(tickets,"青青");
               
                //开启线程
                t.start();
                t2.start();
                t3.start();

        }

}




package cn.itcast3;
/*
* 定义线程执行目标类
*/
public class Tickets implements Runnable{

        //定义成员变量number用来记录票数,供多个线程共享使用
        int number = 100;
        Object lock = new Object();
        //定义卖票逻辑
        @Override
        public void run() {
               
                while(true) {
                        //使用同步代码块,将需要同步的代码包裹
                        synchronized (lock) {
                                try {
                                        Thread.sleep(10);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                               
                                //如果票数是正的,说明有票,就卖票
                                if(number>0) {
                                        //每卖一张票就将票数减1
                                        System.out.println(Thread.currentThread().getName()+"正在销售第"+ number +"号票");
                                        number--;
                                }
                        }
                       
                }
               
        }

}




1 个回复

正序浏览
0722java基础班的吧.粪青.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马