Thread资源共享问题

指尖凉 2018-05-08 03:43:08
今天在学多线程时,大部分博客说Runnable可以实现资源共享,Thread不能,但我无意间看到一个博客说Thread也可以实现资源共享,他的代码是这样的:

class MyThread extends Thread {
private int ticket = 5;
public void run() {
while (ticket > 0) {
System.out.println(Thread.currentThread().getName() + "卖票" + ticket--);
}
}
}
public class Test {
public static void main(String[] args) {
MyThread t = new MyThread();
new Thread(t, "A").start();
new Thread(t, "B").start();;
}
}

输出
A卖票5
B卖票4
A卖票3
B卖票2
A卖票1
看似也可以实现资源共享的样子?我不是很懂,有哪位大神解答一下
...全文
327 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-05-08
  • 打赏
  • 举报
回复
引用 10 楼 hsz2568952354 的回复:
[quote=引用 8 楼 maradona1984 的回复:] "大部分博客说Runnable可以实现资源共享,Thread不能",我觉得你存在理解错误
???博客里这样写的呀 [/quote] 那就是你看了别人理解错误的博客
指尖凉 2018-05-08
  • 打赏
  • 举报
回复
引用 8 楼 maradona1984 的回复:
"大部分博客说Runnable可以实现资源共享,Thread不能",我觉得你存在理解错误

???博客里这样写的呀



dgqjava 2018-05-08
  • 打赏
  • 举报
回复
引用 7 楼 hsz2568952354 的回复:
[quote=引用 4 楼 dgqjava 的回复:] [quote=引用 3 楼 hsz2568952354 的回复:] [quote=引用 1 楼 dgqjava 的回复:] Thread本来就是一个Runnable的实现 public class Thread implements Runnable 所以Runnable能做到的Thread当然能做到
那这样算不算实现资源共享?[/quote]算, 虽然代码有问题[/quote] 那说Thread不能实现资源共享就是不对喽?[/quote]实现资源共享的方式太多了 问题的关键不在于用什么类而是用什么方式 你这个说法就像在纠结坐在公交车的左边是否能到某某地 其实能否到某某地不在于你坐在公交车左边还是右边 而是在于车本身要怎么开
maradona1984 2018-05-08
  • 打赏
  • 举报
回复
"大部分博客说Runnable可以实现资源共享,Thread不能",我觉得你存在理解错误
指尖凉 2018-05-08
  • 打赏
  • 举报
回复
引用 4 楼 dgqjava 的回复:
[quote=引用 3 楼 hsz2568952354 的回复:] [quote=引用 1 楼 dgqjava 的回复:] Thread本来就是一个Runnable的实现 public class Thread implements Runnable 所以Runnable能做到的Thread当然能做到
那这样算不算实现资源共享?[/quote]算, 虽然代码有问题[/quote] 那说Thread不能实现资源共享就是不对喽?
wangxizzz 2018-05-08
  • 打赏
  • 举报
回复
一楼正解。Thread实现了Runnable接口,楼主代码中继承了Thread类就相当于实现了Runnable接口。本质是一样的。
dgqjava 2018-05-08
  • 打赏
  • 举报
回复
引用 3 楼 hsz2568952354 的回复:
[quote=引用 1 楼 dgqjava 的回复:] Thread本来就是一个Runnable的实现 public class Thread implements Runnable 所以Runnable能做到的Thread当然能做到
那这样算不算实现资源共享?[/quote]算, 虽然代码有问题
指尖凉 2018-05-08
  • 打赏
  • 举报
回复
引用 1 楼 dgqjava 的回复:
Thread本来就是一个Runnable的实现 public class Thread implements Runnable 所以Runnable能做到的Thread当然能做到
那这样算不算实现资源共享?
指尖凉 2018-05-08
  • 打赏
  • 举报
回复
引用 2 楼 bigc2001 的回复:
你说的资源共享是不是都可以访问内部变量?同一个实例的内部变量在不同线程里一直是可以访问到的啊,不过由于没有保持同步,容易产生不同线程访问到的资源相同,即,多运行几次,只要有一次出现A3,B3就能说明,你可以把变量范围调大些,运行看看?
那怎样算资源共享,我看他们举的例子差不多都是这样的啊
比特灵 2018-05-08
  • 打赏
  • 举报
回复
你说的资源共享是不是都可以访问内部变量?同一个实例的内部变量在不同线程里一直是可以访问到的啊,不过由于没有保持同步,容易产生不同线程访问到的资源相同,即,多运行几次,只要有一次出现A3,B3就能说明,你可以把变量范围调大些,运行看看?
dgqjava 2018-05-08
  • 打赏
  • 举报
回复
Thread本来就是一个Runnable的实现 public class Thread implements Runnable 所以Runnable能做到的Thread当然能做到

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧