今天看到一个程序里面讲到了目标对象和线程对象对run方法执行的问题,开始一直有些疑惑,可是通过看毕老师的视频和解释我有了终于懂了,真的好有成就感啊,下面是我的体会!
这个程序是声明实现Runnable街口实现奇数\偶数序列的线程并发执行。
public class NumberRunnable implements Runnable
{ private int k;
public NumberRunnable(int k)
{
this.k=k;
}
public NumberRunnable()
{
this(0);
}
public void run()
{
int i=k;
System.out.println();
while(i<50)
{
System.out.print(i+" ");
i+=2;
}
System.out.print("结束!");
}
public static void main(String args[])
{
NumberRunnable odd=new NumberRunnable(1); //创建具有线程体的目标对象
Thread thread_odd=new Thread(odd,"奇数线程"); //以目标对象创建线程对象
thread_odd.start();
new Thread(new NumberRunnable(2),"偶数线程").start();
}
}
程序的运行结果如下:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34
36 38 40 42 44 48 结束!
31 33 35 37 39 41 43 45 47 49 结束!
NumberRunnable 类是实现Runnable接口的一个类,不是Thread的子类。NumberRunnable类的对象odd本身不是线程对象,没有start()等方法,但odd具有实现了的run()方法,这种对象可以作为线程对象的一个目标对象。
Thread类的方法声明如下:
public()
{
if(target!=null)
target.run();
}
由此可知,当目标对象为空时,Thread类对象的run()方法为空。例如:
Tread t1 = new Tread(); //ti的run()方法为空
当目标对象非空时,Tread类的对象执行目标对象的run()方法。例如:
Tread thread_odd = new Tread(odd,"奇数线程"); //thread_odd 实际执行odd的run()方法
后一句声明了一个Tread类的线程对象 thread_odd ,odd是线程对象的目标对象,这意味着, thread_odd 线程对象在运行时将实际执行odd的run()方法。
终于搞懂了这个问题,今天是第一次写日记。写的过程中确实是对之前学习的回顾,能够让我更加深刻的理解知识点,我会努力养成这个好习惯,我相信自己一定能够通过自己的一点一滴的努力达到想要的高度,给自己加油!come on!
(这是昨晚的日记,可是由于网速太慢,无法发表,今早起来果断发表,哈哈!)