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
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
随机推荐
- Zookeeper简介和安装(四)
一.简介: Zookeeper是一个分布式协调服务,提供的服务如下: 命名服务:类似于DNS,但仅对于节点 配置管理:服务配置信息的管理 集群管理:Dubbo使用Zookeeper实现服务治理 分布式 ...
- JAVA中时间格式转换
1.将任意日期格式的字符串转换为指定格式的字符串 //默认格式 String s1 = "20190110133236"; //给定格式 String s2 = "201 ...
- iOS- CoreData 数据库管理利器!
1.前文 上次用SQLite3实现了数据管理,这次准备用CoreData来实现. Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用Core D ...
- window系统mysql无法输入和无法显示中文的处理配置
第一步:使用记事本打开mysql安装目录下的"my.ini”文件. # MySQL client library initialization. [client] port= [mysql] ...
- windows10上安装mysql
环境:windwos 10(1511) 64bit.mysql 5.7.14 一.下载mysql 1. 在浏览器里打开mysql的官网http://www.mysql.com/ 2. 进入页面顶部的& ...
- SSM整合时初始化出现异常
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException ...
- 继续深入更新shell脚本容易出错的地方
一.在shell中用到如果需要输入某些值,需要用到read -p命令 这是我写的猜数字游戏,一开始在输出的时候,屏幕上总会打印输出 "INT" 经过反复的练习才发现 双引号后面应 ...
- 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单
这几天研究了基于bootstrap Ace模板+bootstra.addtabs.js实现菜单的效果 参考了这个人的博客 https://www.cnblogs.com/landeanfen/p/76 ...
- js之广告
涉及到offset等有关获取各种尺寸问题下 <!doctype html> <html lang="en"> <head> <meta c ...
- Flask的request和session是从哪里来的?
因为之前一直在项目中使用django, 所以在学习Flask的过程中, 难免对吧django和Flask进行对比, 这一次我发现Flask中的request和session并没有想象的那么简单, 所以 ...