例如售票的例子:
/**
*使用继承Thread的方式创建线程类.
*/
class TicketOne extends Thread {
public TicketOne(String name) {
super(name);
}
int n = 100;
@Override
public void run() {
for(int i = 1; i <= 100; i++) {
if(i > 0)
System.out.println(getName() + " sold the " + i +"-th ticket");
}
}
}
然后在方法中新启动3个售票线程:
//开启3个独立的线程.
new TicketOne("one").start();
new TicketOne("two").start();
new TicketOne("three").start();
在这里,3个线程当然是独自买自己的票.
然后有人说:
使用继承Thread的方式启动线程,在同一份资源不共享.
是啥意思哈?
我觉得这个应该不是Thread的缺点吧, 我觉得使用类去继承Thread类,就不能继承其他类,不好扩展而已.
大家说是吧.
------解决思路----------------------
这是类的问题和线程没关系啊。要想共享用静态变量或者方法。多线程中用到静态的变量要注意同步异步的问题。
------解决思路----------------------
现在都不太用Thread了,JDK1.5之后更多推荐用线程池
------解决思路----------------------
看了半天,没看出来想要什么样的结果。你看声明并初始化完n后 后面哪里有用过?
所以这个n的声明并初始化 完全没用啊
------解决思路----------------------
你单独创建3个Runnable实例,也不会共享
------解决思路----------------------
三个线程对象,三份互不相关的线程资源(实例属性)
要想共享资源得把所有属性改静态的
没有实现runnable接口方便
------解决思路----------------------
大家意思就是int n = 100; 你这种写法,n是作为成员变量出现的,而不是类变量,所以中间有数据拷贝和数据冗余。你可以设置为静态变量
------解决思路----------------------
用实现Runnable也好,用继承Thread也好,要想共享资源,你得有这个资源,所以,你那个n必须是静态的,要不然,每个实例都在操作自己的n,这怎么共享啊。
------解决思路----------------------
恩,我觉得你理解的是对的,那个人的说法我也觉得不正确,继承Thread和实现Runnable的差异不在能不能共享上