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
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
随机推荐
- C# 类中的静态字段始终继承自基类
我们试想一下现在有一个类Parent,它有一个static的int类型字段number,然后如果类Parent有三个子类Child01.Child02和Child03,那么改变Parent.numbe ...
- Nginx自定义模块编写:根据post参数路由到不同服务器
Nginx自定义模块编写:根据post参数路由到不同服务器 2014-05-05 15:27 blogread IT技术博客 字号:T | T Nginx可以轻松实现根据不同的url 或者 get参数 ...
- 【2018 ICPC亚洲区域赛南京站 A】Adrien and Austin(博弈)
题意: 有一排n个石子(注意n可以为0),每次可以取1~K个连续的石子,Adrien先手,Austin后手,若谁不能取则谁输. 思路: (1) n为0时的情况进行特判,后手必胜. (2) 当k=1时, ...
- 模板——最小生成树kruskal算法+并查集数据结构
并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...
- ATM购物作业
一. 基本需求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录日常消费 ...
- shell编程基础-01
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的 ...
- react-router-dom实现全局路由登陆拦截
相比与vue的路由集中式管理,能够很好的进行统一的路由操作,react的路由看起来更乱,想要进行像vue的全局路由管理不是那么得心应手.在我们的项目中,有很多页面是需要登陆权限验证的,最好的方式就是能 ...
- Git命令中日常不注意又很重要的坑
引言 简单聊一下Git的常用命令和概念,其中很多命令开发者在使用时用法不当导致出现很多问题: 比如,新创建的分支没有追踪想要追踪的分支,很想看到版本提交的内容 以下是觉得比较好用并且完整的 ...
- freeswitch对话机320信令在专有网络情况下不生效的处理
昨天处理客户提出的话机设置呼叫转移不生效的问题, 经过多次测试发现这个问题与freeswitch版本和配置没有关系, 后来分析freeswitch正常转移日志与不转移日志发现不转移的日志少了一行 Re ...
- 全志A64 QT移植
1. 把编译工具 gcc-linaro-aarch64.tar.xz 添加到环境.bashrc 中 2. 下载 tslib-1.4.tar.gz ,libiconv-1.15.tar.gz ,qt-e ...