一、基础

1.1 介绍

实现方法

常用的实现多线程的2种方式:Thread和Runnable。

之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。

1.2 Runnable

定义

Runnable是一个接口,该接口中只包含了一个run()方法。它的定义如下:

public interface Runnable {public abstract void run();
}

作用

实现多线程。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程。

1.3 Thread

定义

Thread是一个类。Thread本身就实现了Runnable接口。它的声明如下:

public class Thread implements Runnable {
}

作用

实现多线程

1.4 Thread和Runnable异同点

相同点

  • 都是“多线程的实现方式”

不同点

  • Thread是类,而Runnable是接口。Thread本身是实现了Runnable接口的类。我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。

  • Runnable还可以用于“资源的共享”。即:多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。通常,建议通过“Runnable”实现多线程。

二、代码示例

2.1 Thread

代码

// ThreadTest.java源码
class MyThread extends Thread {private int ticket = 10;@Overridepublic void run() {for (int i = 0; i < 20; i++) {if (this.ticket > 0) {System.out.println(this.getName() + " 卖票:ticket" + this.ticket--);}}}
}public class ThreadTest {public static void main(String[] args) {// 启动3个线程t1、t2、t3;每个线程各卖10张票!MyThread t1 = new MyThread();MyThread t2 = new MyThread();MyThread t3 = new MyThread();t1.start();t2.start();t3.start();}
}

运行结果

Thread-0 卖票:ticket10
Thread-1 卖票:ticket10
Thread-2 卖票:ticket10
Thread-1 卖票:ticket9
Thread-0 卖票:ticket9
Thread-1 卖票:ticket8
Thread-2 卖票:ticket9
Thread-1 卖票:ticket7
Thread-0 卖票:ticket8
Thread-1 卖票:ticket6
Thread-2 卖票:ticket8
Thread-1 卖票:ticket5
Thread-0 卖票:ticket7
Thread-1 卖票:ticket4
Thread-2 卖票:ticket7
Thread-1 卖票:ticket3
Thread-0 卖票:ticket6
Thread-1 卖票:ticket2
Thread-2 卖票:ticket6
Thread-2 卖票:ticket5
Thread-2 卖票:ticket4
Thread-1 卖票:ticket1
Thread-0 卖票:ticket5
Thread-2 卖票:ticket3
Thread-0 卖票:ticket4
Thread-2 卖票:ticket2
Thread-0 卖票:ticket3
Thread-2 卖票:ticket1
Thread-0 卖票:ticket2
Thread-0 卖票:ticket1

说明

  • MyThread继承于Thread,它是自定义个线程。每个MyThread都会卖出10张票。

  • 主线程main创建并启动3个MyThread子线程。每个子线程都各自卖出了10张票。

2.2 Runnable

代码

// RunnableTest.java源码
class MyThread implements Runnable {private int ticket = 10;@Overridepublic void run() {for (int i = 0; i < 20; i++) {if (this.ticket > 0) {System.out.println(Thread.currentThread().getName() + " 卖票:ticket" + this.ticket--);}}}
}public class RunnableTest {public static void main(String[] args) {MyThread mt = new MyThread();// 启动3个线程t1、t2、t3(它们共用一个Runnable对象);这3个线程一共卖10张票!Thread t1 = new Thread(mt);Thread t2 = new Thread(mt);Thread t3 = new Thread(mt);t1.start();t2.start();t3.start();}
}

运行结果

Thread-0 卖票:ticket10
Thread-2 卖票:ticket8
Thread-1 卖票:ticket9
Thread-2 卖票:ticket6
Thread-0 卖票:ticket7
Thread-2 卖票:ticket4
Thread-1 卖票:ticket5
Thread-2 卖票:ticket2
Thread-0 卖票:ticket3
Thread-1 卖票:ticket1

说明

  • 和上面“MyThread继承于Thread”不同;这里的MyThread实现了Thread接口。

  • 主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了10张票。这说明它们是共享了MyThread接口的。

【JUC-实现多线程】相关推荐

  1. JUC并发多线程进阶

    笔记整理来源 B站UP主狂神说Java https://space.bilibili.com/95256449/ JUC并发多线程进阶 1.什么是JUC 源码+官方文档 JUC是 java util ...

  2. java juc包多线程编程案例:Executor入门示例

    * 认识Executor*/ package com.zxl.juc.c_026_01_ThreadPool;import java.util.concurrent.Executor;public c ...

  3. java多线程高级:JUC

    文章目录 java多线程高级:JUC 1 多线程锁 1.1 传统synchronized 1.2 Lock接口 1.3 Synchronized和Lock的区别 2生产者和消费者问题 2.1 Sync ...

  4. 多线程与高并发整理总结【超全面】

    我们先说一下为什么要讲多线程和高并发? 原因是,你想拿到一个更高的薪水,在面试的时候呈现出了两个方向的现象: 第一个上天 项目经验 高并发.缓存.大流量.大数据量的架构设计 第二个入地 各种基础算法, ...

  5. Day127.JUC:线程间通信(Conditon)、并发容器类(CopyOnWrite)、JUC强大辅助类、Callable

    . 目录 一.线程间通信 线程间通信改造成Lock版  Condition 定制化调用通信 Condition 二.并发容器类 (解决集合安全问题) CopyOnWrite 写时拷贝技术 三.JUC ...

  6. java并发核心知识体系精讲_JAVA核心知识汇总

    双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...

  7. 05_JUC强大的辅助类

    JUC的多线程辅助类非常多,这里我们介绍三个: CountDownLatch(倒计数器) CyclicBarrier(循环栅栏) Semaphore(信号量) 1. CountDownLatch Co ...

  8. 前后端分离:SpringBoot治好了我的时间内耗

    1.前后端分离为了什么 1.1前言 ​ 本文作为系列文章的第一篇,是铁柱在工作之余对自我学习的总结,以下内容是搭建基础的前后端分离的Demo来展开的,需要对MySQL,Spring,SpringMVC ...

  9. 目标是买车买房白富美

    前言 最近工作不忙,给自己制定一些学习任务吧. 1.学习mybatis源码. 2.学习jdk源码. 3.手写spring ioc aop 工作模式. 4.学习juc,并发,多线程编程. 5.学习has ...

  10. 今年行情这么差,到底如何进大厂?

    从春节过后,我,一位双非渣本的大三学生,便踏上了实习之旅,面试了不下三十场,虽然很菜,但是也相应地拿了一些 offer ,例如京东金融.人人车等五六家 offer 总结一下春招就是一个字:难. 没学历 ...

最新文章

  1. 学术会议,已沦为表演...
  2. 标准访问控制列表和扩展的访问控制列表有什么区别??
  3. 天地图专题三:根据标注点的范围确定天地图的中心点和缩放级别
  4. python 词云手把手_手把手教你生成炫酷的词云
  5. requirejs 加载其它js
  6. 浅谈个性化推荐系统中的非采样学习
  7. 算法--二分查找--求平方根(循环法/递归法)
  8. ifix组态软件研究控制按钮权限
  9. HTML零基础,快速学习/复习
  10. Go语言自学系列 | 安装Golang
  11. CCF系列题解--2015年9月第二题 日期计算
  12. Net-speed 一键安装脚本
  13. 数据分析学习总结笔记01:情感分析
  14. 模拟法-鸡兔同笼问题
  15. C语言课设手机电话簿管理系统(大作业)
  16. 网页禁止访问html怎么办,手机网页被禁止访问了怎么办?
  17. pycharm中出现pytest_pytest文档3-pycharm运行pytest
  18. 一本图书的信息包括:图书编号(BookNo),书名(BookName),总册数(Total),借出数(Lend),价格(Value),利用结构体实现以下要求:
  19. 湍流系数计算器_FLUENT湍流强度计算
  20. Pascal VOC数据集 下载 百度云

热门文章

  1. 新春快乐,万事如意,虎虎生威
  2. 使用夜神、逍遥、mumu模拟器无法安装自己编译的APK问题解决
  3. DP 杨老师的照相排列 、矩阵
  4. java指令大全,Vi 指令大全[转载]
  5. java jdbc访问access数据库_Java实训设计----使用JDBC访问Access数据库
  6. 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大
  7. 如果程序员是士兵,那编程语言会是什么样的武器?
  8. 概率与期望,成为预言家的第一步
  9. 小程序传参中文乱码解决办法
  10. 钢笔墨水能否代替打印机墨水_日本兔村文具店的原创文具钢笔墨水温柔如诗的美好设计...