多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。

Java多线程是由JVM来实现,不必关心操作系统的调用问题。

假如我们要实现如下功能:

public class Test {
public static void main(String[] args) {
for(int i=0;i<100;i++){ //和尚念经100遍
System.out.println(i+"南无阿弥陀佛!");
}
for(int i=0;i<100;i++){ //道士讲经100遍
System.out.println(i+"道可道、非常道!");
}
}
}

  即和尚念经100遍和道士讲经100遍

传统方式我们只能等待一个人做完了,第二个人才能开始工作。而实际情况他们应该能够同时工作,且各干各的互不干扰。

于是这时我们就要使用多线程技术。

class HeShang extends Thread{ //继承Thread类
public void run(){ //把任务写进run方法里面
for(int i=0;i<100;i++){
System.out.println(i+"南无阿弥陀佛!");
}
}
}
class DaoShi extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println(i+"道可道、非常道!");
}
}
}
public class Demo {
public static void main(String[] args) {
HeShang heShang=new HeShang();
DaoShi daoShi=new DaoShi();
heShang.start();
daoShi.start();
}
}

  运行后如图:

刚才我们就实现了多线程

Java中多线程实现方式主要有两种(1)继承Thread类(2)实现Runnable接口

使用Runnable接口实现多线程

class HeShang implements Runnable{
public void run(){
for(int i=0;i<100;i++){
System.out.println(i+"南无阿弥陀佛!");
}
}
}
class DaoShi implements Runnable{
public void run(){
for(int i=0;i<100;i++){
System.out.println(i+"道可道、非常道!");
}
}
}
public class Demo {
public static void main(String[] args) {
HeShang heShang=new HeShang();
DaoShi daoShi=new DaoShi();
//要用Thread来启动线程,代理设计模式
Thread t1=new Thread(heShang); //Thread构造方法可接收Runnable类型,向上转型,自动完成
t1.start();
new Thread(daoShi).start(); //匿名对象
}
}

  因为Runnable接口没有run方法,所以实现Runnable接口的类(HeShang or DaoShi)没有start方法,但是Thread是有start方法的。

我们使用代理,首先Thread构造方法可接收Runnable类型

之后用Thread对象启动start方法。

也可以使用匿名对象一行代码完成。

运行后,也能够实现多线程,如图所示:

Java多线程引例及实现多线程的方式的更多相关文章

  1. Java中 单例(Singleton)的两种方式

    第一种(饿汉式单例模式):在声明变量时实例化 public class Singleton { //静态初始化自动实例化 private static Singleton instance = new ...

  2. java懒汉式单例遇到多线程

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功 ...

  3. 高级java必会系列二:多线程经常使用的3个关键字:synchronized、ReentrantLock、volatile

    系列一讲解了多线程,本章讲解多线程开发中经常使用到的3个关键字synchronized.ReentrantLock.volatile. 一.synchronized 互斥锁,即操作互斥,并发线程过来, ...

  4. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  5. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  6. Java多线程(二)关于多线程的CPU密集型和IO密集型这件事

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  7. Android(java)学习笔记215:多线程断点下载的原理(JavaSE实现)

    1. 为什么需要多线程下载?     服务器的资源有限,同时的平均地分配给每个客户端.开启的线程越多抢占的服务的资源就越多,下载的速度就越块. 2. 下载速度的限制条件? (1)你的电脑手机宽带的带宽 ...

  8. Java并发(一)—— 使用多线程

    Java的线程机制是抢占式的,所谓的抢占式指的是每一个线程都会被分配一个指定大小的时间片,一旦这个时间片用完,就会通过上下文切换到另一个线程上去. 并发是主要是为了提高单处理器的性能.创建一个线程会有 ...

  9. “全栈2019”Java多线程第二章:创建多线程之继承Thread类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. Generative Model vs Discriminative Model

    In this post, we are going to compare the two types of machine learning models-generative model and ...

  2. vue 上传文件 并以表格形式显示在页面上

    先上代码 <label for="file" class="btn">多文件上传</label> <input type=&quo ...

  3. 多线程10-SemaphoreSlim

        );         ;i<=;i++)             {                  +  * i;                 ));             C ...

  4. JAVA总结--泛型

    泛型 :程序设计语言的一种特性:将类型参数化: 特征:凡是涉及到强制类型转化的地方,使用泛型均会编译出现问题:泛型仅仅在编译时进行校验,使用泛型的对象,其本质的类型依然不变: ps:不存在泛型数组 一 ...

  5. HDU 6697 Closest Pair of Segments(线段距离)

    首先最容易想到的就是N2暴力枚举所有线段去找最小值,但是这样会做了许多无用功.我们可以先对线段排序,使得线段最左侧的端点按照x轴y轴排序,然后我们可以限定在这个线段的矩形框内的所有线段才有可能产生最小 ...

  6. HNUSTOJ-1696 简单验证码识别(模拟)

    1696: 简单验证码识别 时间限制: 2 Sec  内存限制: 128 MB 提交: 148  解决: 44 [提交][状态][讨论版] 题目描述 验证码是Web系统中一种防止暴力破解的重要手段.其 ...

  7. GB28181 To RTMP/HLS/HTTP-FLV/DASH Gateway

    I. Deployment  / Architecture Block Diagram II. Resources Used 1. freeswitch —— sip server https://f ...

  8. ABBYY FineReader 14.0.107.232 Enterprise 下载和安装使用

    目录 1. 按 2. 软件功能 3. 软件特色 4. 安装说明 5. 激活说明 6. 下载地址 1. 按 ABBYY FineReader 是款功能强大的OCR文字识别软件:它支持者用户进行使用文档的 ...

  9. JMETER - BEANSHELL获取响应结果

    获取响应结果 添加后置处理器     //获取获取请求的返回值 String response = prev.getResponseDataAsString(); //日志打印获取请求的返回值 log ...

  10. Swagger详解(SpringBoot+Swagger集成)(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ai_miracle/article/de ...