@

Thread 类

Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始。

Thread之定义线程类

使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可。

class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" begin");
try {
Thread.sleep(500);
System.out.println(minPrime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" end");
}
}

以上的 PrimeThread 类, 继承了 Thread 类, 因此, 可以通过该类来实现开启线程。

Thread之开启线程

开启线程的方法具体如下:

public static void main(String[] args) {
System.out.println("Thread begin:" + Thread.currentThread().getName());
PrimeThread primeThread = new PrimeThread(100L);
primeThread.start(); System.out.println("Thread end:" + Thread.currentThread().getName()); }

调用时, new 出一个 PrimeThread 类的对象, 然后调用 start() 方法(注意不是调用 run() 方法)。最终得到的结果如下

创建一个简单的多线程在 Java 里面就是这么简单, 但因为 Java 是单继承的 因此继承 Thread 类是很不划算的一种做法。 而在 JDK1.0 , 提供了另一种方式可以对此进行弥补, 就是实现 Runnable 接口的方式。


Runnable 接口

Runnable 之定义线程类

至此,使用 Runnable 接口的方式来创建多线程类的方式就是实现 Runnable, 然后重写 run() 方法, 具体如下:

public class PrimeRun implements Runnable {
long minPrime; PrimeRun(long minPrime) {
this.minPrime = minPrime;
} public void run() {
System.out.println(Thread.currentThread().getName() + " Run begin");
try {
Thread.sleep(500);
System.out.println(minPrime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " Run end");
}
}

Runnable 之开启线程

大体上与继承 Thread 类类似, 但我们可以不用继承。 调用的话还是要通过 Thread 类的, 调用方式如下:

public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+" begin");
PrimeRun primeRun = new PrimeRun(100L);// new
new Thread(primeRun).start(); // 调用 System.out.println(Thread.currentThread().getName()+" end"); }

运行结果如下

可以发现,其实该两种实现多线程的方式在本质上都是一样的。最终都通过 Thread 类中的 start() 方法来开启线程, 该方法可以通知 「线程规划器」本线程已经准备就绪, 系统就可以安排时间来调用 Thread 类中的 run() 方法。因此, 如果没有分配优先级, 线程执行的顺序就是根据系统的调度算法来执行, 是无序的。

以上是对 Java 最基本的开启多线程的方法进行了介绍, 后面几篇会更深入一下介绍一下几个方法和原理。

Java 多线程之 Thread 类 和 Runnable 接口初步使用的更多相关文章

  1. 多线程, Thread类,Runnable接口

    多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 单线程程序:即,若有多个任务只能依次执 ...

  2. 探Java多线程Thread类和Runnable接口之间的联系

    首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情 ...

  3. Java多线程和并发(三),Thread类和Runnable接口

    目录 1.Thread和Runnable接口 三.Thread类和Runnable接口 1.Thread和Runnable接口

  4. 多线程-----Thread类与Runnable接口的区别

    第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...

  5. 使用Thread类和Runnable接口实现多线程的区别

    使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] ...

  6. Thread类与Runnable接口的深入理解

    Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...

  7. java 多线程:Thread类;Runnable接口

    1,进程和线程的基本概念: 1.什么是进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机 ...

  8. Java多线程01(Thread类、线程创建、线程池)

    Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...

  9. Java 多线程 (Thread 类)

    1.多线程 2.卖票 1.多线程实现 两种方式可以实现多线程: 继承 Thread 类,重写 run 方法:定义对象,调用 start 方法 创建类实现 Runnable 接口,作为实参传递给 thr ...

随机推荐

  1. innodb索引统计信息

    以下分析基于mysql5.6.10 统计信息相关字典表 information_schema.statistics mysql.innodb_table_stats mysql.innodb_inde ...

  2. Oracle EBS 自治事务

    自治事务程序主要是自主性,那就是,独立于主要的事务.之所以独立,或者提交之后会影响其他事务处理,本质在于它本身符合编译指令的规则,也就是说它属于在编译阶段就执行的指令,而不是在运行阶段执行的. 当自治 ...

  3. MySQL 8.0有什么新功能

    https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载 ...

  4. INNODB insert buffer 简单分析

    在mysql5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO, 在5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入.删除.更新.pur ...

  5. java基础学习总结——异常处理

    一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要.

  6. Shell学习---Shell脚本的静态检查工具shellcheck

    Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要 ...

  7. jQuery插件实例七:一棵Tree的生成史

    在需要表示级联.层级的关系中,Tree作为最直观的表达方式常出现在组织架构.权限选择等层级关系中.典型的表现形试类似于: 一颗树的生成常常包括三个部分:1)数据库设计:2)后台程序:3)前端代码.那么 ...

  8. C# Excel操作类 ExcelHelper

    实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...

  9. HashSet集合的add()方法的源码

    interface Collection { ... } interface Set extends Collection { ... } class HashSet implements Set { ...

  10. js常见执行方法window.onload = function (){},$(document).ready()

    1. window.onload = function(){}; 当页面DOM对象加载完毕,web浏览器能够运行JS时,此方法即被触发. 2. $(document).ready();当web页面以及 ...