Java 并发编程中如何创建线程

 更新时间:2021年03月05日 08:46:06   作者:布禾  
这篇文章主要介绍了Java 并发编程中如何创建线程,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下

简介

线程是基本的调度单位,它被包含在进程之中,是进程中的实际运作单位,它本身是不会独立存在。一个进程至少有一个线程,进程中的多个线程共享进程的资源。

Java中创建线程的方式有多种如继承Thread类、实现Runnable接口、实现Callable接口以及使用线程池的方式,线程池将在后面文章中单独介绍,这里先介绍另外三种方式。

继承Thread类

优点:在run方法里可以用this获取到当前线程。

缺点:由于Java不支持多继承,所以如果继承了Thread类后就不能再继承其他类。

public class MyThread extends Thread {
 /**
  * 线程要执行的任务
  */
 @Override
 public void run() {
  System.out.println("do something...");
 }

 public static void main(String[] args) {	
	//创建线程
  MyThread myThread = new MyThread();
	//启动线程
  myThread.start();	
 }
}

实现Runnable接口

优点:实现Runnable接口后不影响继承其他类,以及有利于多个线程资源共享。

缺点:获取当前线程需要调用Thread.currentThread()。

public class MyThread implements Runnable {
  /**
  * 线程要执行的任务
  */
 @Override
 public void run() {
  System.out.println("do something...");
 }

 public static void main(String[] args) {
	//创建两个线程,并指定相同的任务
	Thread thread1 = new Thread(new MyThread());
  Thread thread2 = new Thread(new MyThread());
	//启动线程
  thread1.start();
  thread2.start();
 }
}

实现Callable接口

优缺点类似于实现Runnable接口,但是实现Callable接口可以有返回值。

public class MyThread implements Callable<String> {
 /**
  * 线程要执行的任务,并且具有返回值
  */
 @Override
 public String call() throws Exception {
  System.out.println("do something...");
  Thread.sleep(3000);
  return "我是返回值";
 }

 public static void main(String[] args) throws ExecutionException, InterruptedException {
	//创建异步任务
  FutureTask<String> futureTask = new FutureTask(new MyThread());
	//启动线程
  new Thread(futureTask).start();
	//阻塞等待线程执行完成并返回结果
  String result = futureTask.get();
  System.out.println(result);
 }
}

以上就是Java 并发编程中如何创建线程的详细内容,更多关于Java 创建线程的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Cloud Admin健康检查 邮件、钉钉群通知的实现

    Spring Cloud Admin健康检查 邮件、钉钉群通知的实现

    这篇文章主要介绍了Spring Cloud Admin健康检查 邮件、钉钉群通知的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • jvm信息jmap使用的基本方法教程

    jvm信息jmap使用的基本方法教程

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,下面这篇文章主要给大家介绍了关于jvm信息jmap使用的基本方法教程,需要的朋友可以参考下
    2018-08-08
  • java 过滤器filter防sql注入的实现代码

    java 过滤器filter防sql注入的实现代码

    下面小编就为大家带来一篇java 过滤器filter防sql注入的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java常用正则表达式验证工具类RegexUtils.java

    Java常用正则表达式验证工具类RegexUtils.java

    相信大家对正则表达式一定都有所了解和研究,这篇文章主要为大家分享了Java 表单注册常用正则表达式验证工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java基础之数组模拟循环队列

    Java基础之数组模拟循环队列

    这篇文章主要介绍了Java基础之数组模拟循环队列,文中有非常详细的代码示例,对正在学习java基础的小伙伴们也有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • spring boot thymeleaf 图片上传web项目根目录操作步骤

    spring boot thymeleaf 图片上传web项目根目录操作步骤

    这篇文章主要介绍了spring boot thymeleaf 图片上传web项目根目录步骤,本文给大家提到了thymeleaf的基础知识,需要的朋友可以参考下
    2018-03-03
  • Java多线程中关于join方法的使用实例解析

    Java多线程中关于join方法的使用实例解析

    本文通过实例代码给大家实例介绍了Java多线程中关于join方法的使用,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • 简单了解Java的默认和静态方法

    简单了解Java的默认和静态方法

    这篇文章主要介绍了简单了解Java的默认和静态方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JFreeChart插件实现的折线图效果实例

    JFreeChart插件实现的折线图效果实例

    这篇文章主要介绍了JFreeChart插件实现的折线图效果,结合实例形式分析了基于JFreeChart绘制折线图的相关实现技巧,需要的朋友可以参考下
    2016-08-08
  • JAVA实现按时间段查询数据操作

    JAVA实现按时间段查询数据操作

    这篇文章主要介绍了JAVA实现按时间段查询数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论