Java实现线程:实现Runnable接口与继承Thread类

需积分: 10 1 下载量 115 浏览量 更新于2024-09-18 收藏 23KB DOCX 举报
"这篇文档介绍了线程的三种风格,主要关注如何在Java中创建和管理线程,强调了实现Runnable接口相对于直接继承Thread类的灵活性,并提供了实例代码进行解释。" 在多线程编程中,Java提供了两种主要的方式来创建线程:实现Runnable接口和继承Thread类。这篇文档重点讨论了这两种方法。 首先,实现Runnable接口是推荐的方式。这是因为Java不支持多重继承,所以如果你的类已经有一个父类,那么实现Runnable接口可以避免与Thread类的冲突,从而让你的类能够继承其他类。在Runnable接口中,只有一个`public void run()`方法需要实现,这个方法定义了线程的运行主体。例如: ```java class Runner1 implements Runnable { public void run() { for (int i = 0; i < 100; i++) { System.out.println("Runner1:" + i); } } } ``` 然后,你可以创建一个Thread对象,将Runnable实例作为参数传入,如下所示: ```java Runner1 r = new Runner1(); Thread t = new Thread(r); // 这里使用了多态和重写的现象 t.start(); ``` 启动线程的关键在于调用`start()`方法,而不是直接运行`run()`方法。`start()`会启动一个新的线程,并且在新线程中执行`run()`方法。如果直接调用`run()`,则会在当前线程(即主线程)中执行,失去了并发的效果。 另一种创建线程的方式是直接继承Thread类,并重写`run()`方法,如: ```java class MyThread extends Thread { public void run() {} } MyThread myThread = new MyThread(); myThread.start(); ``` 然而,这种方式限制了类的继承性,因此在多数情况下,实现Runnable接口更加灵活和推荐。 文档中还提到了一个关于Applet的例子,它展示了如何在Applet环境下创建和启动线程。AppletViewer在加载Applet时会调用`start()`方法,这会触发线程的创建和执行。在Applet中创建线程,实质上是在类外创建了一个Thread对象,并调用了`start()`方法来启动线程,执行对应的`run()`方法。 总结起来,这篇文档主要讲解了Java中线程的创建和启动,强调了实现Runnable接口的灵活性,并通过代码示例和Applet的场景进行了具体说明。理解和掌握这些内容对于进行多线程编程至关重要,因为它允许开发者有效地利用计算机的多核处理器,提高程序的执行效率。