多线程(英语: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. Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退

    1.安装Git-2.16.2-64-bit.exe后,设置用户名,用户邮箱 #--global参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地 ...

  2. 在vsCode中用git命令合并分支

    提交修改代码到本地仓库 $ git commit -m "修改的东西的描述"切换到master主分支上 $ git checkout master拉取主分支上面的代码 $ git ...

  3. 【JAVA】input.next().charAt(0);的含义

    接收键盘输入的字符串,并且取出它的第一个字符. 分析: Scanner scan=new Scanner(System.in); String s=scan.next(); //返回一个String ...

  4. XMLHttpRequest.setRequestHeader()

    在AJAX中,如果需要像 HTML 表单那样 POST 数据,需要使用 setRequestHeader() 方法来添加 HTTP 头. 然后在 send() 方法中规定需要希望发送的数据: setR ...

  5. 前端与后端数据交互的方式之ajax

    前端与后端数据交互的方式之Ajax 对于前端学习而言,CSS+HTML+JavaScript的学习在自我学习的情况下掌握也不是很难,但是想要实现前后端的数据交互在没有指导的情况下学习会是一头雾水.接下 ...

  6. ajax图片上传(asp.net +jquery+ashx)

    一.建立Default.aspx页面 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile=&q ...

  7. JavaScript中准确的判断数据类型

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为基本类型和引用类型两大类. 其中: 基本类型:String.Number.Boolean.Symbol.Undefined.Null  ...

  8. 2018-8-10-xaml-添加-region

    title author date CreateTime categories xaml 添加 region lindexi 2018-08-10 19:16:51 +0800 2018-03-15 ...

  9. ElasticSearch基本概念阐述

    下面阐述一下ES当中的一些常见词语含义: 集群 集群由一个或多个节点组成,对外提供服务,索引和搜索功能.在所有的节点中,一个集群有一个唯一的名称默认为“ElasticSearch”,此名称很重要,因为 ...

  10. Lamabda Where Select Find First等区别

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...