龙猫12138 2017-05-10 08:46 采纳率: 0%
浏览 3928
已采纳

java 里面,创建一个新线程的时候,为什么要传入一个runnable的参数呢?下面有代码

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Ball extends JPanel implements Runnable
{
/**
*
*/
JFrame frame ;
int x = 30 ;
private static final long serialVersionUID = 1L ;
public Ball ()
{
frame = new JFrame () ;
frame.add(this) ;
frame.setSize(500,500) ;
frame.setVisible(true) ;
}
public void paintComponent(Graphics g)
{
super.paintComponents(g) ;
g.setColor(new Color (238,238,238)) ;
g.fillOval(x-3,30,100,100) ;
g.setColor(Color.RED) ;
g.fillOval(x,30,100,100) ;
}
@Override
public void run()
{
while(true)
{
this.x = this.x + 3 ;
try
{
Thread.sleep(70) ;
repaint () ;
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main (String [] args)
{
Thread th = new Thread (new Ball ()) ;
th.start() ;
}
}
只要添加包名就可以运行了。我想问的是
Thread th = new Thread (new Ball ()) ; 为什么要new一个ball然后传入Thread里面呢?
为什么要这样做呢?为了可以使用run方法吗?

  • 写回答

3条回答 默认 最新

  • l丶bk 2017-05-10 09:36
    关注

    Thread是单继承,Runnable可以多实现,Callable多实现可以返回值Future 。
    在JDK的文档中可以发现,Thread调用start()方法,则会通过JVM找到run()方法。但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。

    http://developer.51cto.com/art/201203/321042.htm
    http://blog.csdn.net/physicsdandan/article/details/51987490
    两篇都是百度可以找到的,看看吧。
    建议以后慢慢的可以去看下jar包里的源码,简单的源码其实就跟自己写的java代码差不多,就是逻辑复杂了一点而已。
    我也是初学,希望可以帮到你

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!