关于线程的问题

wangwei0008 2007-08-20 01:16:09
1、
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
class MyThread implements Runnable
{
int index=0;
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+":"+index++);
}
}
}
2
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.start();
mt.start();
mt.start();
mt.start();
}
}
class MyThread extends Thread
{
int index=0;
public void run()
{
while(true)
{
System.out.println(getName()+":"+index++);
}
}
}
以上是两个线程运行的程序,书上说要多用接口的那种,继承的那个程序每一个线程类的对象里都有index变量的值所以没办法达到同一变量的共享的目的。而做为接口的那个程序的4个线程因为mt作为参数传入的对象是同一个对象,所以访问的index变量也是同一个。
对这话我不太明白 继承的就不不是访问的同一变量了?
...全文
268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
achao818 2007-08-30
  • 打赏
  • 举报
回复
继承的那个 把index + static 就可以了
wangwei0008 2007-08-20
  • 打赏
  • 举报
回复
用内部类是能解决共享变量的问题但是我想知道的是这里的
为什么Runnable可以达到共享同一个变量的?而继承的没达到共享同一个变量呢?
mygia 2007-08-20
  • 打赏
  • 举报
回复
你的第二个会报错,同一个线程调用2次start会出错。用继承也能实现共享一个变量的,写个内部类就行了。
wangwei0008 2007-08-20
  • 打赏
  • 举报
回复
为什么你想要的结果应该是创建4个线程,要4个线程共同完成index值变化且没有重复的过程。采用接口,就相当于为同一个任务开辟了4个线程,4个线程共同完成任务。而用继承,则4个线程不相关,各自运行,达不到合作的效果呢?
iisbocai 2007-08-20
  • 打赏
  • 举报
回复
你的第一个例子是两个线程一起运行的,有两个线程应该是一直处于等待的。
那两个线程一起更改index的值所以输出结果会乱,而不是顺序的。
第二个例子,只是一个线程而已,虽然你start了四次,但只有一个start真正启动了线程
wangwei0008 2007-08-20
  • 打赏
  • 举报
回复
是不是我那个继承的方法没有实现多线程呢? 因为我的U是支持超线程的所以才把现在多线程的程序的线程搞乱了而没实现的就执行一个线程就不会乱呢 ?
wangwei0008 2007-08-20
  • 打赏
  • 举报
回复
补充 书上打印的结果是那个调用了接口的程序打印的index的值是有次序排列下来的程序结果 继承的那个没给结果
但是我用自己的电脑打印的却是继承的是按顺序的接口的反倒乱。不知道为什么。觉的和书给的结论不一样呢 ? 我的电脑是超线程的对这结果不知道有没有影响
强行停止在命令提示符中是 ctrl+c要运行程序的朋友注意一下不然的话会眼花的。

62,623

社区成员

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

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