Java多线程实现的几种方式

多进程是计算机中的一个重要概念,通常一个任务称为一个进程,比如浏览网页、播放音乐都是一个进程。

在进程内部可能还需要执行多个子任务,比如在使用word文档打字的时候,不仅要进行字符打印,同时还要进行字符统计、拼接检查等任务。

进程和线程的关系是:一个进程可以包含一个或者多个线程,但至少会包含一个线程。

在Java中,多线程的学习是非常重要的,本文主要概括Java多线程实现的几种方式。

Java中实现多进程的方式大概有3种:

实现Runnable接口,重写run方法

继承Thread类,重写run方法(Thread类本身也实现了Runnable接口)

实现Callable接口,重写call方法(带有返回值)

通过Runnable接口实现多线程1

2

3

4

5

6

7

8

9

10

11

12

13public class Main{

public static void main(String[] args){

Thread t = new Thread(new MyRunnable());

t.start(); // 启动新线程

}

}

class MyRunnable implements Runnable{

@Override

public void run(){

System.out.println("start new thread!");

}

}

实现Runnable接口的类,只定义了任务,自身不具有线程能力。需要通过Thread类的构造器来将任务驱动在一个线程中。

通过继承Thread类实现

Thread类中已经实现了Runnable接口,所以可以直接继承Thread类,覆写run方法实现多线程

1

2

3

4

5

6

7

8

9

10public class MyThread extends Thread{

public void run(){

System.out.println("New Thread : "+Thread.currentThread().getName());

}

public static void main (String []args){

MyThread thread = new MyThread();

thread.start();

System.out.println("Main Thread : " + Thread.currentThread().getName());

}

}

通过继承Callable接口实现

相较于实现Runnable接口,Callable方法可以有返回值,并且可以抛出异常

执行Callable方法,需要FutureTask实现类的支持,用于接受运算的结果,FutureTask是Future接口的实现

需要覆写call方法,运行Callable任务可以拿到一个Future对象,Future表示异步计算的结果

通过Future对象可了解任务执行情况,可取消任务的执行,还可以获取任务执行的结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.FutureTask;

public class TestCallable{

public static void main(String[] args){

ThreadDemo td = new ThreadDemo();

FutureTask result = new FutureTask<>(td);

new Thread(result).start();

try {

Integer sum = result.get();

System.out.println(sum);

} catch (InterruptedException | ExecutionException e) {

e.printStackTrace();

}

}

}

class ThreadDemo implements Callable{

@Override

public Integer call() throws Exception{

int sum = 0;

for (int i = 0; i <= 100; i++) {

sum += i;

}

return sum;

}

}

java几种多线程_Java多线程实现的几种方式相关推荐

  1. java线程集合点_Java多线程学习笔记(三) 甚欢篇

    使人有乍交之欢,不若使其无久处之厌 <小窗幽记>很多时候,我们需要的都不是再多一个线程,我们需要的线程是许多个,我们需要让他们配合.同时我们还有一个愿望就是复用线程,就是将线程当做一个工人 ...

  2. java多线程_Java多线程

    java多线程 Multithreading in Java is a very important topic. I have written a lot about Threads in Java ...

  3. java线程代码实现_Java 多线程代码实现讲解

    作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...

  4. java 锁旗标_Java多线程

    Java多线程 1. 多线程存在的意义 多线程最大的作用就是能够创建"灵活响应"的桌面程序,而编写多线程最大的困难就是不同线程之间共享资源的问题,要使这些资源不会同时被多个线程访问 ...

  5. java中的23种设计模式_Java开发中的23种设计模式详解

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...

  6. java 读取css文件_java文件读取的两种方式

    JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...

  7. java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  8. java线程异步传值_Java 多线程传值的四种方法

    Java 多线程传值的四种方法 作者: sunjs 更新时间:2020-09-11 15:20:16 原文链接 其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数 ...

  9. java 镶嵌创建线程_Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...

最新文章

  1. ABAP--如何实现合计字段分单位合计
  2. Gradle自定义插件
  3. sigsuspend函数(mysleep函数的改进)
  4. 苹果延期中国零售商店的重新开业时间 线上商店依旧正常工作
  5. linux chmod修改权限失败,Linux chmod修改文件夹权限
  6. 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
  7. 20165203《Java程序设计》第四周学习总结
  8. 字符串校验器 ExcelValidator.java
  9. LitJson不支持float
  10. 西班牙打掉一黑客集团 曾千万台肉鸡
  11. 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
  12. IDEA查看或修改JDK版本
  13. DSP控制的电力线通信模拟前端接口设计
  14. 关于腾讯云服务器备案全流程 内容
  15. 关于msp430系列单片机的一些入门心得(新手向)
  16. 伊对和连信交友相亲聊天平台靠谱吗?
  17. 原厂PL7203大电流3A充电IC
  18. 1~20以内的加减法
  19. 关于巴伦——Marchand巴伦
  20. 查看服务器所有文件大小,查看服务器文件夹下内存大小

热门文章

  1. 太强了!用200个LED做一个智能手表
  2. php怎么解决雪崩或穿透,Redis之缓存击穿、穿透、雪崩、预热,以及如何解决?...
  3. matlab双纵坐标的绘图命令_MATLAB基础学习之绘图基本命令
  4. python三个数求和_Python:list是否包含3个连续的整数,总和为7...
  5. 网络安全06_安装Windows XP_几个虚拟机能够相互ping通,并且能够ping通互联网114.114.114.114
  6. java 打开sql数据库_idea 使用Java连接SQL Server数据库教程
  7. 阅读王概凯老师架构漫谈系列总结
  8. xcode 7.2 怎么在Playground 中加载图片
  9. Java 语法 索引 ----- 泛型(Generics)
  10. 读取数据库名及表与表中的字段