api接口使用 线程委托 action 实现 多线程, 具体举例
时间: 2024-10-23 08:12:46 浏览: 20
API接口通常用于异步处理,通过线程委托和Action(在.NET中称为Task或ThreadPool.QueueUserWorkItem,在Java中则是ExecutorService提交Runnable任务)可以在多线程环境下执行。这里是一个简单的例子:
**在Java中:**
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
// 创建一个Runnable任务
Runnable task = new Task("Hello from background thread");
// 使用executor提交任务到线程池
executor.execute(task);
// 主线程继续执行,不会阻塞
System.out.println("Main thread is still running...");
}
}
class Task implements Runnable {
private String message;
public Task(String message) {
this.message = message;
}
@Override
public void run() {
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(message);
}
}
```
在这个例子中,`Task`实现了`Runnable`接口,并在线程池`executor`中执行。主线程创建了一个新的线程来运行这个任务,自己则继续执行其他工作。
**在.NET中:**
```csharp
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// 创建一个Action委托
Action<string> action = SayHelloAsync;
// 使用Task.Run执行异步任务
await Task.Run(() => action("From background thread"));
Console.WriteLine("Main thread continues...");
}
static async Task SayHelloAsync(string message)
{
await Task.Delay(2000); // 模拟耗时操作
Console.WriteLine(message);
}
}
```
这里,我们使用了`Task.Run`来将`SayHelloAsync`方法作为任务运行于单独的线程上,主线程保持同步执行。
阅读全文