黑马程序员技术交流社区
标题:
线程实现两种方式的区别?
[打印本页]
作者:
王_强
时间:
2013-3-25 15:00
标题:
线程实现两种方式的区别?
本帖最后由 贾文泽 于 2013-3-27 00:45 编辑
class Ticket implements Runnable{
//static 静态变量
private int tick=100;
public void run(){
while(true){
if(tick>0)
System.out.println(Thread.currentThread()+"sale:"+tick--);
}
}
}
public class TicketTest {
/**
* 简单的卖票程序
* 多线程卖票
*/
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();
}
}
请问下,实现接口的方式,是不是t1,t2,t3,t4四个线程共享代码,但是要是继承的话,是不是t1,t2,t3,t4四个线程都有自己独立的代码空间?
作者:
123
时间:
2013-3-25 17:06
简单的说就一句话:extends Thread类的不能共享成员变量,而implements Runnable接口的共享实例变量。
作者:
IT菜鸟
时间:
2013-3-25 17:23
一般情况下推荐使用实现mplements Runnable接口的 因为它有以下好处
1.更适合多个线程,处理相同数据的情况。
2.避免了java 的单继承带来的局限性。
3.实现数据跟代码的分离,增强代码的健壮性。
作者:
陆旭东
时间:
2013-3-25 20:23
t1,t2,t3,t4四个线程都有自己独立的代码空间,用操作系统来解释就是,没有让它们在同一个临界区
作者:
罗平
时间:
2013-3-25 21:04
支持蔡兄
作者:
芦子骐
时间:
2013-3-26 07:43
如果是implements Runnable 是共享成员变量的,但是一定要注意一点的是,被共享的资源一定要加锁!!否则程序在运行时期会出现问题。
如果是extends Thread 则是单独使用自己的空间。
这两种方法没有好与不好,要看需求而定。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2