java几种多线程_Java多线程实现的几种方式
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多线程实现的几种方式相关推荐
- java线程集合点_Java多线程学习笔记(三) 甚欢篇
使人有乍交之欢,不若使其无久处之厌 <小窗幽记>很多时候,我们需要的都不是再多一个线程,我们需要的线程是许多个,我们需要让他们配合.同时我们还有一个愿望就是复用线程,就是将线程当做一个工人 ...
- java多线程_Java多线程
java多线程 Multithreading in Java is a very important topic. I have written a lot about Threads in Java ...
- java线程代码实现_Java 多线程代码实现讲解
作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...
- java 锁旗标_Java多线程
Java多线程 1. 多线程存在的意义 多线程最大的作用就是能够创建"灵活响应"的桌面程序,而编写多线程最大的困难就是不同线程之间共享资源的问题,要使这些资源不会同时被多个线程访问 ...
- java中的23种设计模式_Java开发中的23种设计模式详解
所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...
- java 读取css文件_java文件读取的两种方式
JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...
- java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...
尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...
- java线程异步传值_Java 多线程传值的四种方法
Java 多线程传值的四种方法 作者: sunjs 更新时间:2020-09-11 15:20:16 原文链接 其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数 ...
- java 镶嵌创建线程_Java多线程——之一创建线程的四种方法
1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...
最新文章
- ABAP--如何实现合计字段分单位合计
- Gradle自定义插件
- sigsuspend函数(mysleep函数的改进)
- 苹果延期中国零售商店的重新开业时间 线上商店依旧正常工作
- linux chmod修改权限失败,Linux chmod修改文件夹权限
- 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
- 20165203《Java程序设计》第四周学习总结
- 字符串校验器 ExcelValidator.java
- LitJson不支持float
- 西班牙打掉一黑客集团 曾千万台肉鸡
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
- IDEA查看或修改JDK版本
- DSP控制的电力线通信模拟前端接口设计
- 关于腾讯云服务器备案全流程 内容
- 关于msp430系列单片机的一些入门心得(新手向)
- 伊对和连信交友相亲聊天平台靠谱吗?
- 原厂PL7203大电流3A充电IC
- 1~20以内的加减法
- 关于巴伦——Marchand巴伦
- 查看服务器所有文件大小,查看服务器文件夹下内存大小
热门文章
- 太强了!用200个LED做一个智能手表
- php怎么解决雪崩或穿透,Redis之缓存击穿、穿透、雪崩、预热,以及如何解决?...
- matlab双纵坐标的绘图命令_MATLAB基础学习之绘图基本命令
- python三个数求和_Python:list是否包含3个连续的整数,总和为7...
- 网络安全06_安装Windows XP_几个虚拟机能够相互ping通,并且能够ping通互联网114.114.114.114
- java 打开sql数据库_idea 使用Java连接SQL Server数据库教程
- 阅读王概凯老师架构漫谈系列总结
- xcode 7.2 怎么在Playground 中加载图片
- Java 语法 索引 ----- 泛型(Generics)
- 读取数据库名及表与表中的字段