黑马程序员技术交流社区
标题:
关于多线程共享的问题,求解
[打印本页]
作者:
高梦晓
时间:
2013-4-17 17:42
标题:
关于多线程共享的问题,求解
想知道用如下两种方法创建的线程共享变量时,有没有什么不同?或是哪一种好一些?
方法1,继承Thread类,使用静态变量:
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
MutliThread m2=new MutliThread("Window 2");
m1.start();
m2.start();
}
class MutliThread extends Thread{
private static int ticket=100;//共享变量
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
}
}
}
复制代码
方法2,实现Runnable接口:
public static void main(String [] args){
MutliThread m1=new MutliThread("Window 1");
MutliThread m2=new MutliThread("Window 2");
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
t1.start();
t2.start();
}
class MutliThread implements Runnable{
private int ticket=100;//共享变量
public void run(){
while(ticket>0){
System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
}
}
}
复制代码
作者:
董维明
时间:
2013-4-17 18:16
当然实现Runnable接口,,因为java类不支持多继承关系,如果一个类继承了Thread,那这个类就不能再继承其他类,但java中支持多实现,一个类可以同时实现N个接口,所以实现Runnable接口是最完美的
作者:
JavaUtil
时间:
2013-4-17 18:29
楼上的话我就不重复了,如果是共享数据的话,还是用倾向于用Runnable接口的实现类好,如果用继承Thread的类,在变换静态变量时,以前用过该类的所有线程都会发生变化,不可控。
作者:
周音匀
时间:
2013-4-17 18:32
楼上说的对,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了,在其他的方面,两者之间并没什么太大的区别。
作者:
gerenvip
时间:
2013-4-17 21:26
如楼上两位同仁说的 由于java中类的基础具有单继承性,
例如
MutliThread继承Thread后就不能继承其他类, 但是有时候需要继承其他类,例如
student应该继承Person类,但是student类中的一部分代码需要用多线程执行,所以student要继承Thread,
但是student已经继承了Person,所以这时就不能继承Thread了。
这时就用到了第二种创建进程的方法,即声明实现 Runnable 接口的类
对于实现方式和继承方式有什么区别呢?
实现方式好处:避免单继承的局限性
定义线程时,建议使用实现方式。
作者:
黄玉昆
时间:
2013-4-18 20:16
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2