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变量也是同一个。
对这话我不太明白 继承的就不不是访问的同一变量了?
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变量也是同一个。
对这话我不太明白 继承的就不不是访问的同一变量了?
但是我用自己的电脑打印的却是继承的是按顺序的接口的反倒乱。不知道为什么。觉的和书给的结论不一样呢 ? 我的电脑是超线程的对这结果不知道有没有影响
强行停止在命令提示符中是 ctrl+c要运行程序的朋友注意一下不然的话会眼花的。
那两个线程一起更改index的值所以输出结果会乱,而不是顺序的。
第二个例子,只是一个线程而已,虽然你start了四次,但只有一个start真正启动了线程
为什么Runnable可以达到共享同一个变量的?而继承的没达到共享同一个变量呢?