【JUC-实现多线程】
一、基础
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-实现多线程】相关推荐
- JUC并发多线程进阶
笔记整理来源 B站UP主狂神说Java https://space.bilibili.com/95256449/ JUC并发多线程进阶 1.什么是JUC 源码+官方文档 JUC是 java util ...
- java juc包多线程编程案例:Executor入门示例
* 认识Executor*/ package com.zxl.juc.c_026_01_ThreadPool;import java.util.concurrent.Executor;public c ...
- java多线程高级:JUC
文章目录 java多线程高级:JUC 1 多线程锁 1.1 传统synchronized 1.2 Lock接口 1.3 Synchronized和Lock的区别 2生产者和消费者问题 2.1 Sync ...
- 多线程与高并发整理总结【超全面】
我们先说一下为什么要讲多线程和高并发? 原因是,你想拿到一个更高的薪水,在面试的时候呈现出了两个方向的现象: 第一个上天 项目经验 高并发.缓存.大流量.大数据量的架构设计 第二个入地 各种基础算法, ...
- Day127.JUC:线程间通信(Conditon)、并发容器类(CopyOnWrite)、JUC强大辅助类、Callable
. 目录 一.线程间通信 线程间通信改造成Lock版 Condition 定制化调用通信 Condition 二.并发容器类 (解决集合安全问题) CopyOnWrite 写时拷贝技术 三.JUC ...
- java并发核心知识体系精讲_JAVA核心知识汇总
双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...
- 05_JUC强大的辅助类
JUC的多线程辅助类非常多,这里我们介绍三个: CountDownLatch(倒计数器) CyclicBarrier(循环栅栏) Semaphore(信号量) 1. CountDownLatch Co ...
- 前后端分离:SpringBoot治好了我的时间内耗
1.前后端分离为了什么 1.1前言 本文作为系列文章的第一篇,是铁柱在工作之余对自我学习的总结,以下内容是搭建基础的前后端分离的Demo来展开的,需要对MySQL,Spring,SpringMVC ...
- 目标是买车买房白富美
前言 最近工作不忙,给自己制定一些学习任务吧. 1.学习mybatis源码. 2.学习jdk源码. 3.手写spring ioc aop 工作模式. 4.学习juc,并发,多线程编程. 5.学习has ...
- 今年行情这么差,到底如何进大厂?
从春节过后,我,一位双非渣本的大三学生,便踏上了实习之旅,面试了不下三十场,虽然很菜,但是也相应地拿了一些 offer ,例如京东金融.人人车等五六家 offer 总结一下春招就是一个字:难. 没学历 ...
最新文章
- 学术会议,已沦为表演...
- 标准访问控制列表和扩展的访问控制列表有什么区别??
- 天地图专题三:根据标注点的范围确定天地图的中心点和缩放级别
- python 词云手把手_手把手教你生成炫酷的词云
- requirejs 加载其它js
- 浅谈个性化推荐系统中的非采样学习
- 算法--二分查找--求平方根(循环法/递归法)
- ifix组态软件研究控制按钮权限
- HTML零基础,快速学习/复习
- Go语言自学系列 | 安装Golang
- CCF系列题解--2015年9月第二题 日期计算
- Net-speed 一键安装脚本
- 数据分析学习总结笔记01:情感分析
- 模拟法-鸡兔同笼问题
- C语言课设手机电话簿管理系统(大作业)
- 网页禁止访问html怎么办,手机网页被禁止访问了怎么办?
- pycharm中出现pytest_pytest文档3-pycharm运行pytest
- 一本图书的信息包括:图书编号(BookNo),书名(BookName),总册数(Total),借出数(Lend),价格(Value),利用结构体实现以下要求:
- 湍流系数计算器_FLUENT湍流强度计算
- Pascal VOC数据集 下载 百度云
热门文章
- 新春快乐,万事如意,虎虎生威
- 使用夜神、逍遥、mumu模拟器无法安装自己编译的APK问题解决
- DP 杨老师的照相排列 、矩阵
- java指令大全,Vi 指令大全[转载]
- java jdbc访问access数据库_Java实训设计----使用JDBC访问Access数据库
- 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大
- 如果程序员是士兵,那编程语言会是什么样的武器?
- 概率与期望,成为预言家的第一步
- 小程序传参中文乱码解决办法
- 钢笔墨水能否代替打印机墨水_日本兔村文具店的原创文具钢笔墨水温柔如诗的美好设计...