黑马程序员技术交流社区
标题:
创建线程方法二:实现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