哪个方法是实现Runnable接口所需的
时间: 2024-02-06 15:09:43 浏览: 21
实现Runnable接口所需的方法是run()方法。在这个方法中编写线程要执行的任务逻辑。例如:
```java
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程要执行的任务逻辑
System.out.println("Hello, I'm running on a separate thread!");
}
}
```
在这个例子中,我们创建了一个实现了Runnable接口的类MyRunnable,并在其中实现了run()方法,当这个线程被启动时,它会输出一句话到控制台。
相关问题
、编写一个Java应用程序,利用Runnable接口,实现多线程,要求有三个线程:睡觉、娱乐和学习,各测试50次。
好的,下面是实现代码:
```java
public class MyThread implements Runnable {
private String task;
public MyThread(String task) {
this.task = task;
}
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
System.out.println(task + " " + i);
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class MultiThreadDemo {
public static void main(String[] args) {
Thread t1 = new Thread(new MyThread("睡觉"));
Thread t2 = new Thread(new MyThread("娱乐"));
Thread t3 = new Thread(new MyThread("学习"));
t1.start();
t2.start();
t3.start();
}
}
```
在这个程序中,我们定义了一个实现了Runnable接口的MyThread类,它有一个构造函数用来传递任务名称。在run()方法中,我们使用for循环测试50次任务,并在每次任务之间使用Thread.sleep()方法来模拟任务所需的时间。
在主函数中,我们创建了三个线程t1、t2和t3,并分别传入MyThread实例作为参数。然后我们调用start()方法开始运行线程。
运行这个程序,你会看到三个线程交替执行任务,每个任务执行50次。注意每次运行的结果可能会不同,因为Thread.sleep()方法的休眠时间是随机生成的。
//Clock.java import java.awt.*; import javax.swing.*; import java.util.*; //import Date and Locale import java.text.SimpleDateFormat;//导入所需的类和包 public class Clock extends JApplet implements Runnable { Thread clockThread; public void init() { //在JApplet的方法init 中,创建一线程命名为Clock clockThread = new Thread(this, "Clock-thread"); clockThread.start(); //让线程处于就绪状态 } //实现Runnable接口中的方法run,每隔一秒刷新时钟画面 public void run() { boolean flag=true; while (flag) { repaint();//调用repaint方法,对界面进行重绘,实现界面的刷新 try { clockThread.sleep(1000); } //让Clock线程进入睡眠状态 catch (InterruptedException e) { flag=false;}//如果睡眠状态被打断了,就抛出一个异常 } //end of while } //end of run public void paint(Graphics g){ //JApplet的方法paint,显示当前时钟对象的值 super.paint(g);//调用父类的paint方法,显示时钟对象的值 SimpleDateFormat formatter = new SimpleDateFormat (" hh:mm:ss ", Locale.getDefault());//创建SimpleDateFormat类的对象,并调用构造函数对对象进行初始化,将其赋给引用变量 Date c = new Date();//创建Date类的对象,赋给引用变量 tring lastdate = formatter.format(currentDate); g.drawString(lastdate ,5, 10); } public void destroy() { //JApplet的方法 clockThread.interrupt(); }//定义一个 }//创建Clock类继承JApplet实现Runnable接口,本质就是创建一个Clock线程
以下是对Clock.java代码进行注释:
```java
import java.awt.*; // 导入AWT包,包含绘制组件的类
import javax.swing.*; // 导入Swing包,包含图形用户界面的组件
import java.util.*; // 导入Util包,包含日期和时间计算的类
import java.text.SimpleDateFormat; // 导入日期格式化的类
public class Clock extends JApplet implements Runnable { // 定义一个名为Clock的类,继承自JApplet类,实现Runnable接口
Thread clockThread; // 定义一个线程对象clockThread
public void init() { // 重写JApplet类的init方法
clockThread = new Thread(this, "Clock-thread"); // 创建一个名为Clock-thread的线程对象
clockThread.start(); // 启动线程
}
public void run() { // 实现Runnable接口中的run方法
boolean flag = true; // 定义一个标志变量flag,初始值为true
while (flag) { // 循环执行以下操作
repaint(); // 调用repaint方法,对界面进行重绘,实现界面的刷新
try {
clockThread.sleep(1000); // 让Clock线程进入睡眠状态,睡眠1秒钟
} catch (InterruptedException e) {
flag = false; // 如果睡眠状态被打断了,就抛出一个异常,将标志变量flag设置为false,退出循环
}
} // end of while
} // end of run
public void paint(Graphics g) { // 重写JApplet类的paint方法,用于绘制时钟
super.paint(g); // 调用父类的paint方法,显示时钟对象的值
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat类的对象,并调用构造函数对对象进行初始化,将其赋给引用变量formatter
Date currentDate = new Date(); // 创建Date类的对象,赋给引用变量currentDate,表示当前时间
String lastdate = formatter.format(currentDate); // 将当前时间格式化为字符串形式
g.drawString(lastdate, 5, 10); // 在界面上绘制字符串形式的当前时间
}
public void destroy() { // 重写JApplet类的destroy方法
clockThread.interrupt(); // 中断线程
}
} // end of Clock class
```
注释应该简洁明了,突出代码的主要功能。排版应该遵循Java代码规范,包括缩进、空格、换行等,使代码易于阅读和理解。