java——多线程基础
目录
- 多线程使用场景:
- 线程和进程区别:
- 创建线程的方式:
- Thread类的有关方法:
- 线程的同步:
- 模拟火车站售票程序
- 线程的同步:synchronized
- 1. 同步代码块:
- 2. synchronized还可以放在方法声明中,表示整个方法为同步方法。
- 总结
并发与并行:
并行: 指两个或多个事件在同一时刻发生 ( 同时发生 ) 。
并发: 指两个或多个事件在同一个时间段内发生。
多线程使用场景:
1. 后台任务,比如游戏服务器
2.定时向大量用户(100W)用户发邮件
3.异步处理: 发微博/记录日志等
4.分布式计算...
线程和进程区别:
进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多 个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创 建、运行到消亡的过程。
线程:进程内部的一个独立执行单元;一个进程可以同时并发的运行多个线程,可以理解为一个进程便相当 于一个单 CPU 操作系统,而线程便是这个系统中运行的多个任务。
创建线程的方式:
继承Thread类
1) 定义子类继承Thread类。
2) 子类中重写Thread类中的run方法。
3) 创建Thread子类对象,即创建了线程对象。
4) 调用线程对象start方法:启动线程,调用run方法。
Thread类的有关方法:
void start() : 启动线程,并执行对象的run()方法
run() : 线程在被调度时执行的操作
String getName() : 返回线程的名称
void setName(String name) :设置该线程名称
static Thread currentThread() : 返回当前线程。在Thread子类中就是this,通常用于主线程和Runnable实现类
static void yield() :线程让步
暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程
若队列中没有同优先级的线程,忽略此方法
join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止 低优先级的线程也可以获得执行
static void sleep(long millis) :(指定时间:毫秒)
令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
抛出InterruptedException异常
l stop(): 强制线程生命期结束,不推荐使用
boolean isAlive():返回boolean,判断线程是否还活着
线程的同步:
模拟火车站售票程序
线程的同步:synchronized
解决办法:
对多条操作共享数据的语句,让一个线程都执行完,执行过程中,其他线程不可以参与执行。
Java对于多线程的安全问题提供了专业的解决方式:同步机制
1. 同步代码块:
synchronized (对象){
// 需要被同步的代码;
}
2. synchronized还可以放在方法声明中,表示整个方法为同步方法。
例如:
public synchronized void show (String name){
….
}
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
java多线程CountDownLatch与线程池ThreadPoolExecutor/ExecutorService案例
1.CountDownLatch: 一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行. 2.ThreadPoolExecutor/ExecutorService: 线程池,使用线程池可以复用线程,降低频繁创建线程造成的性能消耗,同时对线程的创建.启动.停止.销毁等操作更简便. 3.使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点到公司门口集合,统一乘坐公司所租大巴前往目的地. 在这个案例中,公司作为主线程,员工作为子线程. 4.代码示例: package
-
java多线程CyclicBarrier的使用案例,让线程起步走
1.CyclicBarrier: 一个同步辅助类,用于协调多个子线程,让多个子线程在这个屏障前等待,直到所有子线程都到达了这个屏障时,再一起继续执行后面的动作. 2.使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点[自驾车]到公司门口集合,然后[自驾车]前往目的地. 在这个案例中,公司作为主线程,员工作为子线程. 3.代码示例: package com.test.spring.support; import java.util.concurrent.BrokenBarrierExce
-
Java多线程下载文件实现案例详解
原理解析: 利用RandomAccessFile在本地创建一个随机访问文件,文件大小和服务器要下载的文件大小相同. 根据线程的数量(假设有三个线程),服务器的文件三等分,并把我们在本地创建的文件同样三等分,每个线程下载自己负责的部分,到相应的位置即可. 示例图: 代码如下 import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.U
-
Java多线程:生产者与消费者案例
目录 前言 工具 知识点 设计思路 具体步骤 总结 前言 想象一下生活中哪些是和线程沾边的?饭店炒菜就是一个很好的例子 首先客人要吃菜,前提是厨师要炒好,也就是说,厨师不炒好的话客人是没有饭菜的.这时候,厨师就是一个线程,客人拿菜就是另一个线程. 工具 jdk13,IDEA2019.1.4 知识点 Thread.Runnable.synchronized.面向对象知识(继承.封装.接口.方法重写).条件判断以及线程的一些其他知识点 设计思路 首先要有两个线程,也就是说要两个类,分别是Produc
-
Java多线程下载网图的完整案例
Java多线程下载网图案例 此案例依赖--文件操作工具类(FileUtils) 使用 apache 的commons-io包下的FileUtilsimportorg.apache.commons.io.FileUtils; 下载commons-io包 官方API文档 点击即可下载,然后导入IDEA的库中或者项目中. 导包 首先创建一个下载器 步骤: 1.新建一个download类 2.在类中建立一个下载方法 下载方法需要接收2个变量,一个是url下载地址,一个是name文件名称 3.在下载方法中
-
Java多线程基础
目录 一.线程 二.创建多线程的方式 1.继承Thread类实现多线程 2.实现Runnable接口方式实现多线程 3.Callable接口创建线程 三.线程的生命周期与状态 四.线程的执行顺序 1.定时器 2.线程的互斥与同步通信 3.线程同步通信技术 一.线程 什么是线程: 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 什么是多线程: 多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务. 二.创建多线程的方式 多线程的创建方式有三种:T
-
Java多线程——基础概念
目录 java多线程 并发与并行: 多线程使用场景: 创建线程的方式: Thread类的有关方法: 线程的同步: 1. 同步代码块: 2. synchronized还可以放在方法声明中,表示整个方法为同步方法. 总结 java多线程 并发与并行: 并行: 指两个或多个事件在同一时刻发生 ( 同时发生 ) . 并发: 指两个或多个事件在同一个时间段内发生. 多线程使用场景: 1. 后台任务,比如游戏服务器 2.定时向大量用户(100W)用户发邮件 3.异步处理: 发微博/记录日志等 4.分布式计算
-
Java多线程基础——Lock类
之前已经说道,JVM提供了synchronized关键字来实现对变量的同步访问以及用wait和notify来实现线程间通信.在jdk1.5以后,JAVA提供了Lock类来实现和synchronized一样的功能,并且还提供了Condition来显示线程间通信. Lock类是Java类来提供的功能,丰富的api使得Lock类的同步功能比synchronized的同步更强大.本文章的所有代码均在Lock类例子的代码 本文主要介绍一下内容: Lock类 Lock类其他功能 Condition类 Con
-
新手了解java 多线程基础知识(二)
目录 一.线程的生命周期 JDK中用Thread.State类定义了线程的几种状态: 二.线程同步 1.为什么要有线程同步 2.synchronized 2.1同步代码块 2.2同步方法 3.Lock锁 总结 一.线程的生命周期 JDK中用Thread.State类定义了线程的几种状态: 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用 Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常 要经历如下的五种状态: 新建:当一个Thread类或其子类的对象被声明并
-
新手了解java 多线程基础知识(一)
目录 1.基本概念 2.多线程的创建 3.Thread类方法介绍 总结 1.基本概念 程序.进程.线程 程序(program)是为完成特定任务.用某种语言编写的一组指令的集 合.即指一段静态的代码,静态对象. 进程(process)是程序的一次执行过程,或是正在运行的一个程序.是 一个动态的过程:有它自身的产生.存在和消亡的过程--具有生命 周期.可以理解为一个正在运行的软件. 线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行 路径.可以理解为一个软件的功能. 多线程程序的
-
java——多线程基础
目录 多线程使用场景: 线程和进程区别: 创建线程的方式: Thread类的有关方法: 线程的同步: 模拟火车站售票程序 线程的同步:synchronized 1. 同步代码块: 2. synchronized还可以放在方法声明中,表示整个方法为同步方法. 总结 并发与并行: 并行: 指两个或多个事件在同一时刻发生 ( 同时发生 ) . 并发: 指两个或多个事件在同一个时间段内发生. 多线程使用场景: 1. 后台任务,比如游戏服务器 2.定时向大量用户(100W)用户发邮件 3.异步处理: 发微
-
java多线程:基础详解
目录 Java内存模型 主内存和工作内存的交互命令 内存模型的原子性 内存模型的可见性 内存模型的有序性 指令重排优化的底层原理 valatile原理 volatile与加锁的区别 先行发生原则 线程的三种实现方式 总结 Java内存模型 Java内存模型与Java内存结构不同,Java内存结构指的是jvm内存分区.Java内存模型描述的是多线程环境下原子性,可见性,有序性的规则和保障. Java内存模型提供了主内存和工作内存两种抽象,主内存指的是共享区域 ,工作内存指的是线程私有工作空间. 当
-
新手了解java 多线程基础知识
目录 一.线程的生命周期 JDK中用Thread.State类定义了线程的几种状态: 二.线程同步 1.为什么要有线程同步 2.synchronized 2.1同步代码块 2.2同步方法 3.Lock锁 四.基本概念 五.多线程的创建 六.Thread类方法介绍 总结 一.线程的生命周期 JDK中用Thread.State类定义了线程的几种状态: 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用 Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常 要经历如下的
-
Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)
本篇我们来研究一下 wait() notify() notifyAll() . DEMO1: wait() 与 notify() public class Test { static class ThreadOne extends Thread { private Callback mCallback; @Override public void run() { work(); if (mCallback != null) { mCallback.onResult(false); } } //
-
Java多线程和并发基础面试题(问答形式)
本文帮助大家掌握Java多线程基础知识来对应日后碰到的问题,具体内容如下 一.Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,C
随机推荐
- 详解易语言中的数据类型
- 老生常谈Scanner的基本用法
- js使用原型对象(prototype)需要注意的地方
- 从ASP.NET得到Microsoft Word文档的代码
- php array_values 返回数组的值实例详解
- asp数据库防下载处理
- C#使用二维数组模拟斗地主
- 使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方法]
- 浅析php学习的路线图
- php安全配置 如何配置使其更安全
- AJAX和jQuery动态加载数据的实现方法
- 利用XMLSerializer将对象串行化到XML
- 如何验证会员系统中用户的邮箱是否真实存在
- javascript数据类型验证方法
- MSDOS.SYS文件的参数设置方法
- MySQL数据库转移,access,sql server 转 MySQL 的图文教程
- 阿里云ECS(linux)一键安装web环境sh安装步骤
- 统计在线人数 dxy
- jQuery实现div拖拽效果实例分析
- Java实现栈和队列面试题