java 多线程执行方法
时间: 2023-10-26 14:16:45 浏览: 46
Java 多线程有两种方式可以执行方法:
1. 继承 Thread 类
```java
class MyThread extends Thread {
public void run() {
// 执行方法的代码
}
}
```
创建 MyThread 对象并调用 start() 方法即可启动该线程。
```java
MyThread myThread = new MyThread();
myThread.start();
```
2. 实现 Runnable 接口
```java
class MyRunnable implements Runnable {
public void run() {
// 执行方法的代码
}
}
```
创建 MyRunnable 对象,并将其传递给 Thread 类的构造方法中。
```java
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
```
这两种方式都可以实现多线程执行方法,具体选择哪种方式取决于具体的需求。
相关问题
java多线程执行方法
Java多线程实现的方式有四种:
1. 继承Thread类,重写run方法
```java
public class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
MyThread myThread = new MyThread();
myThread.start(); // 启动线程
```
2. 实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
```java
public class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start(); // 启动线程
```
3. 通过Callable和FutureTask创建线程
```java
public class MyCallable implements Callable<String> {
public String call() throws Exception {
// 线程执行的代码
return "result";
}
}
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
Thread thread = new Thread(futureTask);
thread.start(); // 启动线程
String result = futureTask.get(); // 获取线程执行结果
```
4. 通过线程池创建线程
```java
ExecutorService executorService = Executors.newFixedThreadPool(10); // 创建线程池
executorService.execute(new Runnable() {
public void run() {
// 线程执行的代码
}
});
executorService.shutdown(); // 关闭线程池
```
java多线程执行sql
Java多线程执行SQL可以提高查询效率和响应速度。一种常见的做法是使用线程池,通过多线程并发执行SQL语句。示例代码如下:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadSQL {
private static final String URL = "jdbc:mysql://localhost:3306/test";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
public static void main(String[] args) {
Runnable task = () -> {
try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD)) {
String sql = "SELECT * FROM users";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name") + " : " + rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
}
};
ExecutorService executor = Executors.newFixedThreadPool(10); // 创建线程池
for (int i = 0; i < 100; i++) {
executor.execute(task); // 提交任务
}
executor.shutdown(); // 关闭线程池
}
}
```
上述代码中,创建了一个固定大小的线程池,每个线程都执行相同的SQL查询任务。在循环中提交100个任务,线程池会自动分配线程来执行任务,当所有任务执行完毕后,关闭线程池。
需要注意的是,多线程执行SQL时需要使用连接池来管理数据库连接。每个线程都需要获取一个连接,使用完毕后释放连接,以避免连接泄漏和性能问题。