1、实现Runnable接口
这是最常用的方法,需要创建一个实现Runnable接口的类,并重写run()方法。然后,创建一个Thread对象并将这个实现Runnable接口的类的实例作为参数传递给Thread的构造函数。最后,调用Thread对象的start()方法来启动线程。
public class MyRunnable implements Runnable { public void run() { // 线程执行的代码 }
} public class Main { public static void main(String[] args) { Thread thread = new Thread(new MyRunnable()); thread.start(); }
}
2、继承Thread类
这是第二种方法,需要创建一个继承Thread类的类,并重写run()方法。然后,创建一个这个新类的实例,并调用其start()方法来启动线程。
public class MyThread extends Thread { public void run() { // 线程执行的代码 }
} public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); }
}
3、使用Callable和Future
这是第三种方法,Callable接口类似于Runnable接口,但是它返回一个结果并且可以抛出异常。Future接口表示异步计算的结果。使用这两个接口可以更好地处理多线程编程中的结果获取和异常处理。使用Executor框架中的submit()方法可以将Callable对象提交给ExecutorService来执行,然后通过Future对象获取执行结果。
public class MyCallable implements Callable<Integer> { public Integer call() throws Exception { // 线程执行的代码,返回结果 return 42; }
} public class Main { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(new MyCallable()); Integer result = future.get(); // 获取执行结果,可能会抛出异常 executor.shutdown(); // 关闭ExecutorService }
}