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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wx348602984 中级黑马   /  2015-4-18 23:36  /  601 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast2;
/*
* 线程安全问题:
*                 多个窗口卖指定个数的票
*                 3个窗口卖100张票
*                 票:共享数据
*                 窗口:线程
*/
public class Ticket implements Runnable{
        //定义成员变量,来表示车票的个数
        private int tickedNumber = 100;
        //定义一个对象,来做代码块同步的锁
        private Object object = new Object();
        //重写run方法
        @Override
        public void run() {
                //同步代码块
                synchronized(object){
                        //来确定条件
                        while(true){
                                if(tickedNumber>0){
                                        try {//休眠防止一张票买多次
                                                Thread.sleep(10L);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        System.out.println(Thread.currentThread().getName()+"正在售票:"+tickedNumber--);//卖出一张,票数减一
                                }
                        }
                }
        }
}
package cn.itcast2;

public class Test3 {

        public static void main(String[] args) {
                //创建票对象
                Ticket ticket = new Ticket();
                //创建线程对象
                Thread thread = new Thread(ticket,"窗口1");
                Thread thread2= new Thread(ticket,"窗口2");
                Thread thread3= new Thread(ticket,"窗口3");
                //开启线程
                thread.start();
                thread2.start();
                thread3.start();

        }

}

12 个回复

倒序浏览
:handshake:handshake
回复 使用道具 举报
:handshake:handshake
回复 使用道具 举报
很好,辛苦楼主发这么有意义的帖
回复 使用道具 举报
itheima_llt 发表于 2015-4-20 23:29
很好,辛苦楼主发这么有意义的帖

不客气;P;P;P
回复 使用道具 举报
膜拜大神!谢谢你的信息!
回复 使用道具 举报
同步的代码发生了错误,while(ture)不应该在同步代码里面,否则的话会导致一个线程不执行完循环不会解锁,而循环结束了,其他的线程也就没什么可做的了
回复 使用道具 举报
qian0217wei 来自手机 高级黑马 2015-5-19 08:22:24
8#
可以通过jdk1.5中的lock和unlock优化,关键是可以创建多个collection对象
回复 使用道具 举报
没搞懂。发这个代码是来干啥的~~
回复 使用道具 举报
楼主自学还是报班的,用了几天学到多线程这里的
回复 使用道具 举报
腻害。
回复 使用道具 举报
还没学到多线程 先预习
回复 使用道具 举报
赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马