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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯zk47 中级黑马   /  2014-11-21 17:03  /  1588 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求:假设有四个卖票窗口,共同买100张票
步骤:
1、定义类实现Runnable接口
2、覆盖Runnable接口中的run方法(将线程要运行的代码放在该run方法中)
3、通过Thread类建立线程对象
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
   ---因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去指定指定对象的run方法
    --就必须明确该run方法所属对象
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
代码体现如下:
class Ticket implements Runnable
{
        private int tick=100;
        public void run()
        {
                while(true)
                {
                        if(tick>0){System.out.println(Thread.currentThread().getName()+"...sale:"+tick--);}
                }
        }
}

class TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t=new Ticket();
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);
                Thread t4=new Thread(t);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }
}


6 个回复

倒序浏览
DamonZh 来自手机 中级黑马 2014-11-21 17:20:50
沙发
不安全 呵呵
回复 使用道具 举报
要出问题滴。呵呵
回复 使用道具 举报
要加个锁
回复 使用道具 举报
这个就是多线程访问,是不安全的,简单来说就是有个线程正在改tick变量,同时又有一个线程来该了,这时候就出问题了。这个tick到底是多少,不知道。不过我们有个锁机制synchronized这个函数,可以有效的控制。
回复 使用道具 举报
多线程的访问一般是要加锁的,可这个地方加锁后会不会大大影响效率呢?
回复 使用道具 举报
是的,谢谢大神们的补充:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马