Java学习 · 初识 多线程
多线程
1. 基础概念
a) 程序 Program
i. 静态代码,指令集,应用程序执行的蓝本
b) 进程 Process
i. 动态概念,正在运行的程序,有地址空间,操作系统任务调度
ii. 特点
- 动态性
- 并发性
- 独立性
c) 线程 Thread
i. 在进程内多条执行路径
ii. 轻量级进程
iii. 一个进程中运行多个线程,完成不同任务,称为多线程
d)
- 2. 线程的创建
a) 继承Thread + 重写run方法
i.
b) 实现Runnable接口 + 实现Run接口
i. 使用静态代理
- 创建真实角色
- 创建代理角色,Thread + 真实角色的引用
- 代理角色.start
ii. 两种区别
iii. 常用方法
iv. 另一种实现
- 通过Callable接口实现多线程
a)
b) 思路
i. 创建 Callable实现类+重写call
ii. 借助 执行调度服务 ExecutorService,获取Future对象
iii. 获取值 result.get()
iv. 停止服务 ser.shutdownNow();
v.
- 线程状态
a)
b) 停止线程
i. Void interrupt()
- 发送中断请求
- 如果被Sleep调用阻塞,抛出异常
ii. Static Boolean interrupted()
- 测试当前线程是否被中断
- 副作用:将当前线程的状态重置为false
iii. Boolean isInterupte()
- 没有副作用
iv. Static Thread currentThread()
- 返回代表当前执行线程的Thread线程
- 同步:并发,多个线程访问同一份资源,确保资源安全 -->线程安全
a) 关键字synchronized
i. 同步块 synchronized
ii. 同步方法 synchronized
- 5. 死锁:过多的同步引发
a) 解决:生产者消费者模式
i. 信号灯法
ii. 一、 wait() :等待,释放锁 sleep 不释放锁
iii. 二、notify()/notifyAll():唤醒
iv. 与 synchronized 一起使用
Java学习 · 初识 多线程的更多相关文章
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- 2019/3/7 Java学习之多线程(基础)
Java学习之多线程 讲到线程,就必须要懂得进程,进程是相当于一个程序的开始到结束,而线程是依赖于进程的,没有进程,就没有线程.线程也分主线程和子线程,当在主线程开启子线程时,主线程结束,而子线程还可 ...
- java学习笔记 --- 多线程(多线程的创建方式)
1.创建多线程方式1——继承Thread类. 步骤: A:自定义类MyThread继承Thread类. B:MyThread类里面重写run()? 为什么是run()方法呢? C:创建对象 D:启 ...
- Java学习之多线程详解
一.多线程的实现 1.继承Thread类 a.子类继承Thread类具备多线程能力 b.启动线程:子类对象.start() c.不建议使用:避免OOP单继承局限性 package com. ...
- java学习之多线程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程(Lightweight Process,LWP)是程序中一个单一 ...
- JAVA学习总结-多线程基础:
参考书籍:疯狂JAVA讲义 1.进程和线程; 进程是处于运行过程中的程序;并且具有一定的独立功能;进程是系统进行系统资源分配和调度的一个独立单位. 一般而言,进程包括以下三个特征: 独立性:进程是系统 ...
- JAVA学习笔记 -- 多线程之共享资源
在多线程程序执行过程中,可能会涉及到两个或者多个线程试图同一时候訪问同一个资源.为了防止这样的情况的发生,必须在线程使用共享资源时给资源"上锁",以阻挡其他线程的訪问. 而这样的机 ...
- 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
随机推荐
- 【SQLSERVER学习笔记】分页存储过程+调用
USE [数据库名] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[存储过程名] @pageI ...
- react系列(二)高阶组件-HOC
高阶组件 简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. 我在之前的博客<闭包和类>中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用. ...
- AFNetworking 打印错误信息(二进制信息)
AFNetworking 打印错误信息(二进制信息) NSError *underError = error.userInfo[@"NSUnderlyingError"]; NSD ...
- BufPay.com 个人收款接口 接入步骤
作为独立开发者产品需要收款是非常麻烦的,注册公司维护成本太高,市面上各种收款工具要么手续费太高,要么到账很慢,体验很不好. 看到 「BufPay.com 个人收款」 这个收款工具,挺有意思的.原理是监 ...
- 【C++ Primer】读书笔记_第一章
Main(): 1. C++程序必须包含main()函数,操作系统通过调用main来运行C++程序. 2. main()的形参可以为空. 3. main函数的返回类型必须为int,返回给操作系统.in ...
- 本地打jar包到本地的Maven出库
1.命令行输入 mvn install:install-file -DgroupId=jar包的groupId -DartifactId=jar包的artifactId -Dversion=jar包的 ...
- MySQL常用参数说明(持续更新)
##innodb correlate innodb_flush_log_at_trx_commit value: 0,[1],2 effect: control the flush opera ...
- python爬虫学习笔记(1)
一.请求一个网页内容打印 爬取某个网页: from urllib import request # 需要爬取的网页 url = "https://mbd.baidu.com/newspage ...
- ON DUPLICATE KEY UPDATE 插入or更新
mean:若数据表中存在以相同主键的记录,就更新该条记录.否则就插入一条新的记录. 单条:INSERT INTO tablename (`field1`,`field2`) VALUES(value1 ...
- pip快速git项目安装
pip install git+https://github.com/xx/xx.git