【JavaEE】Java中的多线程 (Thread类)
在Java中,创建线程的传统方式是定义一个类,该类继承Thread
类并重写run
方法。然后创建这个类的实例,即创建了线程。
以下是一个简单的例子:
public class MyThread extends Thread {
public void run() {
System.out.println("线程正在运行...");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
在上述代码中,MyThread
类继承了Thread
类并重写了run
方法。在main
方法中,我们创建了MyThread
类的实例,并调用了start
方法来启动线程,这会导致JVM调用run
方法。
从Java 5开始,Java提供了通过Runnable
接口创建线程的方式,这种方式不需要创建一个新的类继承Thread
类,而是可以实现Runnable
接口,并将线程的运行代码放在run
方法中。
以下是使用Runnable
接口的例子:
public class MyRunnable implements Runnable {
public void run() {
System.out.println("线程正在运行...");
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();
}
}
在这个例子中,我们创建了一个实现了Runnable
接口的类MyRunnable
,并将线程的运行代码放在了run
方法中。然后我们创建了MyRunnable
类的实例,并将其作为参数传递给Thread
类的构造函数,最后通过调用start
方法来启动线程。
在Java中,还可以使用Callable
和Future
接口来创建有返回值的线程。
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class MyCallable implements Callable<String> {
public String call() throws Exception {
return "线程运行完毕";
}
}
public class Main {
public static void main(String[] args) throws Exception {
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
Thread myThread = new Thread(futureTask);
myThread.start();
System.out.println(futureTask.get());
}
}
在这个例子中,我们创建了一个实现了Callable
接口的类MyCallable
,并将线程的运行代码放在了call
方法中。然后我们创建了MyCallable
类的实例,并将其作为参数传递给FutureTask
类的构造函数。之后我们创建了一个新的Thread
实例,并将FutureTask
对象作为参数传递给它的构造函数。最后,我们调用start
方法来启动线程,并调用futureTask.get()
来获取线程运行完毕后的返回值。
以上就是Java中创建线程的几种方式。
评论已关闭