本文概述
- 实施可运行
- 如何使用Runnable接口创建线程
- 使用runnable的简单线程示例
- 在网络编程中使用Runnable类
- 线程与可运行
可运行接口具有未定义的方法run(), 其返回类型为void, 并且不接受任何参数。下面给出了run()方法的方法摘要-
方法 | 描述 |
---|---|
public void run() | 此方法不接受任何参数。当使用实现Runnable类的类的对象创建线程时, 将在单独执行的线程中调用run方法。 |
实现Runnable的类在实例化Thread实例并将其自身作为目标传递时, 无需在子类Thread上运行而在其他线程上运行。这很重要, 因为除非有意修改或增强类的基本行为, 否则不应将类归为子类。
由于每个线程代表一个单独的控制流, 因此可运行类在网络编程中被广泛使用。同样在多线程编程中, 使用Runnable类。此接口存在于java.lang包中。
实施可运行 这是通过实现Runnable创建线程的最简单方法。通过实现Runnable, 可以在任何对象上创建线程。要实现一个Runnable, 只需实现run方法。
公共无效run()
在此方法中, 我们具有要在并发线程上执行的代码。在这种方法中, 我们可以使用变量, 实例化类并执行与主线程相同的操作。该线程将一直保留到该方法返回为止。 run方法建立新线程的入口点。
如何使用Runnable接口创建线程 要使用runnable创建线程, 请使用以下代码-
Runnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
线程将执行在其参数中传递的Runnable对象的run()方法中提到的代码。
使用runnable的简单线程示例
public class ExampleClass implements Runnable { @Override public void run() {System.out.println("Thread has ended");
} public static void main(String[] args) {ExampleClass ex = new ExampleClass();
Thread t1= new Thread(ex);
t1.start();
System.out.println("Hi");
}}
【Java Runnable接口】输出:
文章图片
在网络编程中使用Runnable类 runnable类用于执行多线程编程, 尤??其是在服务器端, 因为服务器可能会收到来自不同客户端的多个请求。为了快速而有效地解决此问题, 我们使用了多线程编程。
使用Runnable-的网络程序示例
以下程序显示了一个服务器程序, 该程序创建一个线程, 然后创建一个套接字, 并等待客户端连接到该线程, 并请求输入字符串-
public class Example { public static void main(String[] args) { new Thread(new SimpleServer()).start();
} static class SimpleServer implements Runnable { @Overridepublic void run() { ServerSocket serverSocket = null;
while (true) {try {serverSocket = new ServerSocket(3333);
Socket clientSocket = serverSocket.accept();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("Client said :"+inputReader.readLine());
} catch (IOException e) {e.printStackTrace();
}finally{try {serverSocket.close();
} catch (IOException e) {e.printStackTrace();
}}} } }
在此程序中, 我们正在线程上为客户端创建套接字。通常, 在服务器中为不同的客户端请求创建不同的线程。但是, 如果编译器控制每线程内存的能力很差, 则为每个客户端创建一个单独的线程不是一个好习惯。
线程与可运行
文章图片
根据线程类和Runnable接口的性能, 内存使用情况和组成, 它们之间存在一些差异。
- 通过扩展线程, 将产生其他方法的开销, 即它们消耗过多或间接的内存, 计算时间或其他资源。
- 由于在Java中, 我们只能扩展一个类, 因此, 如果我们扩展Thread类, 则将无法扩展任何其他类。这就是为什么我们应该实现Runnable接口来创建线程的原因。
- Runnable使代码更加灵活, 因为如果我们正在扩展线程, 则我们的代码将仅位于线程中, 而如果是Runnable, 则可以在各种执行程序服务中传递它, 或将其传递给单线程环境。
- 如果我们实现Runnable接口, 则代码的维护很容易。
推荐阅读
- Java中如何创建线程
- Java中的System.out.println()
- 我们可以启动一个线程两次吗
- Java中的NumberFormatException
- Java中的内存管理
- Java中的NoSuchElementException
- 常见的Windows 11问题和解决方法(提示和指南)
- 6款适用于Chromebook(Chrome替代品)的最佳浏览器合集
- 如何修复无法重置Windows 11的问题(详细分步指南)