当前位置: 代码迷 >> J2SE >> 大伙儿觉得,说'Thread在同一份资源不共享'的观点是不是错的
  详细解决方案

大伙儿觉得,说'Thread在同一份资源不共享'的观点是不是错的

热度:504   发布时间:2016-04-23 19:56:52.0
大家觉得,说'Thread在同一份资源不共享'的观点是不是错的?
例如售票的例子:
/**
 *使用继承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的差异不在能不能共享上
  相关解决方案