黑马程序员技术交流社区

标题: 创建线程方法二:实现Runable接口 [打印本页]

作者: 张凯zk47    时间: 2014-11-21 17:03
标题: 创建线程方法二:实现Runable接口
需求:假设有四个卖票窗口,共同买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();
        }
}



作者: DamonZh    时间: 2014-11-21 17:20
不安全 呵呵
作者: Eagle    时间: 2014-11-21 19:34
要出问题滴。呵呵
作者: 赵哲成    时间: 2014-11-21 19:49
要加个锁
作者: zhouyunfang    时间: 2014-11-21 23:46
这个就是多线程访问,是不安全的,简单来说就是有个线程正在改tick变量,同时又有一个线程来该了,这时候就出问题了。这个tick到底是多少,不知道。不过我们有个锁机制synchronized这个函数,可以有效的控制。
作者: 这是我的地盘    时间: 2014-11-22 01:15
多线程的访问一般是要加锁的,可这个地方加锁后会不会大大影响效率呢?
作者: 张凯zk47    时间: 2014-11-22 15:01
是的,谢谢大神们的补充:P




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2