您的位置:首页 > 财经 > 产业 > java多线程有哪些实现方式?

java多线程有哪些实现方式?

2024/11/16 10:26:35 来源:https://blog.csdn.net/weixin_42924400/article/details/140500369  浏览:    关键词:java多线程有哪些实现方式?

java多线程有哪些实现方式?


文章目录

  • java多线程有哪些实现方式?
  • 一、继承Thread类,重写run方法,调用start方法
  • 二、实现runnable接口,新建Thread类,用Thread构造函数初始化,调用start方法
  • 三、实现Callable接口,该方法可以通过FutureTask.get方法获取线程的结果



提示:以下是本篇文章正文内容,下面案例可供参考

一、继承Thread类,重写run方法,调用start方法

public class TreadTest extends Thread {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {TreadTest t = new TreadTest();t.start();System.out.println(Thread.currentThread().getName());}}

tips:start方法才是新开启线程,此时代码会先答应出来main,然后才是run方法中的线程名。
如果执行的是run方法:

public class TreadTest extends Thread {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {TreadTest t = new TreadTest();t.run();System.out.println(Thread.currentThread().getName());}}

只会打印main,因为run方法并没有开启一个新的线程,run方法只是保存线程运行的代码块,不会创建新的线程,只是一个普通方法

二、实现runnable接口,新建Thread类,用Thread构造函数初始化,调用start方法

public class TreadTest implements Runnable {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {Thread thread = new Thread(new TreadTest());thread.start();System.out.println(Thread.currentThread().getName());}
}

三、实现Callable接口,该方法可以通过FutureTask.get方法获取线程的结果

public class TreadTest implements Callable<String> {@Overridepublic String call() throws Exception {return Thread.currentThread().getName();}public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> futureTask = new FutureTask<>(new TreadTest());new Thread(futureTask).start();System.out.println(futureTask.get());System.out.println(Thread.currentThread().getName());}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com