-
继承Thread
代码实现
public class ThreadTest{ private static class MyThread extends Thread { @Override public void run() { System.out.println("执行线程"+Thread.currentThread().getName()); } } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
-
实现Runnable接口
代码实现
public class ThreadTest{ private static class MyRunnable implements Runnable{ @Override public void run() { System.out.println("执行线程runnable ..."+Thread.currentThread().getName()); } } public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); new Thread(myRunnable).start(); } }
想一下为什么已经extends Thread 的方式去实现线程了,为什么还要implements Runnable的方式?
java 只支持单线程,多实现。如果采用继承Thread类的情况就不能再继承其他类,而采用实现Runnable的方式可以实现多个不同的类。使得我们的类更加灵活
-
实现Callable接口
代码实现
public class ThreadTest{ private static class MyCallable implements Callable { @Override public Object call() throws Exception { System.out.println("执行线程callable ..."+Thread.currentThread().getName()); return "success"; } } public static void main(String[] args) throws ExecutionException, InterruptedException { MyCallable myCallable = new MyCallable(); //因为start方法是Thread类特有的,这里通过FutureTask将myCallable包装一下 FutureTask futureTask = new FutureTask(myCallable); new Thread(futureTask).start(); //获取线程的执行返回结果 System.out.println(futureTask.get()); } } //Callable与Runnable的不同就是 线程执行的方法是有返回值的,调用get()方法的时候是同步阻塞的
java 创建线程几种方式
最新推荐文章于 2024-05-23 12:12:13 发布