luogg_java学习_12_线程
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.
转载请注明 出自 : luogg的博客园 谢谢配合!
线程
程序、进程、线程的概念
- 程序:我们用程序设计语言编写的静态代码
- 进程:进程是程序的一次执行,是动态的概念,每个程序载入内存中运行就产生一个进程,进程独占系统资源,所谓的多进程指的是可以有多个程序同时执行
- 线程:线程是比进程更小的执行单位,一个程序中运行的多个任务,多个线程共享所在进程的资源(一个进程可以包含一个或多个线程,一个进程至少要包含一个线程,例如:主线程 main)。
例如:
我们每个人就是一个多线程的对象,想想看,我们可以边吃饭边看电视,同时还要呼吸、心跳等,在同一时间内可以做几件事情,
线程的两种创建方式
- 继承Thread类
- 创建类继承 Thread 类
- 复写 run 方法(想要同时执行代码)
- 激活线程类或启动线程类 start()
- 实现Runnable接口
- 创建类实现 Runnable 接口
- 复写 run 方法(想要同时执行代码)
- 激活线程类或启动线程类 start()
线程的两种创建方式对比
继承: 继承的同时默认的也实现了Runnable接口
实现的方式优于继承的方式 , 1, 避免了单继承的局限性 2, 如果多个线程要操作同一份数据(或资源), 更适合用实现的方式
线程的常用方法
start();新建的线程进入runnable状态
sleep();
run();
getName();获取线程名称
setName();
currentThread()调取当前线程
join(); 在a线程中调用B线程的join方法
isAlive
getPriority() 获取线程优先级 默认5 1,10
setPriority
Object中的方法
wait 等待
notify 通知,用于线程通信
notifyAll 通知所有线程
使用多线程优点
1, 提高应用程序的响应
2, 提高计算机cpu的利用率
3, 改善程序结构
线程的生命周期
1,新建 new
2,就绪 start
3,运行
4,阻塞
5,死亡
线程的安全问题
由于一个线程在操作共享数据过程中, 未执行完的情况下, 另外的线程参数进来, 导致了共享数据存在了安全问题
如何解决线程的安全问题
必须让一个线程操作共享数据完了之后,其他线程才有机会参与线程数据共享
java实现线程的安全
1,同步代码块
慎用tihs原因: 继承时候有多个对象,不知道this指哪个
同步监视器可以写this(当前对象), 也可以写static Object obj = new Object();中的obj
2,同步方法
类本身充当锁: 类名.class
同步方法的锁是tihs(默认了),当继承线程时,会创建多个对象, 用同步方法也会出错
同步和死锁
案例:“银行取款问题”,银行账户,可以办卡,可以办存折, 假设,现在两人同时通过存折或者是卡取钱,卡里有500,甲拿卡取500,乙拿着存折也要取500
同步:某一个对象占用CPU资源的时候,其他对象不能抢占CPU的资源,必须等当前对象使用完该资源的时候才能使用CPU资源
异步:就是线程的默认状态,所有对象都可以随时抢占CPU的资源。
实现同步的方式:
1、把需要同步的代码用 synchronized(对象) {} 语句块绑定
2、把需要同步的代码放到方法中,并且用 synchronized 关键字声明,然后再在 run 方法中调用
死锁
过多的同步就有可能导致死锁
线程不同的弊端:
由于一个时间只能有一个线程访问共享数据, 效率变低了
懒汉式单例模式处理线程安全问题
线程的死锁
线程通信
luogg_java学习_12_线程的更多相关文章
- python自动化开发学习 进程, 线程, 协程
python自动化开发学习 进程, 线程, 协程 前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...
- ORB-SLAM2 论文&代码学习 —— LocalMapping 线程
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...
- 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理
摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...
- 学习C#线程
2016-12-17 无意间看到了关于C#线程的讲解.经过一下午的学习后,慢慢的对线程也有了一定的理解.这里讲解的是最基础的内容,包括线程的创建.睡眠.等待.终止. 实验环境:Visual studi ...
- java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- java SE学习之线程同步(详细介绍)
java程序中可以允许存在多个线程,但在处理多线程问题时,必须注意这样一个问题: 当两个或多个线程同时访问同一个变量,并且一些线程需要修改这个变量时,那么这个 ...
- 从使用到原理学习Java线程池
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收. 所 ...
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
随机推荐
- .Net组件程序设计之对象生命周期
.Net组件程序设计之对象生命周期 .NET 垃圾回收 IDisposable() Using语句 .NET 垃圾回收 是CLR管理着垃圾回收器,垃圾回收器监控着托管堆,而我们使用的对象以及系统启动是 ...
- fc-san
在SAN网络中,所有的数据传输在高速.高带宽的网络中进行,SAN存储实现的是直接对物理硬件的块级存储访问,提高了存储的性能和升级能力. 早期的SAN采用的是光纤通道(FC,Fibre Channel) ...
- Objective-C 工厂模式(上) -- 简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...
- Sqoop切分数据的思想概况
Sqoop通过--split-by指定切分的字段,--m设置mapper的数量.通过这两个参数分解生成m个where子句,进行分段查询.因此sqoop的split可以理解为where子句的切分. 第一 ...
- OpenCASCADE General Transformation
OpenCASCADE General Transformation eryar@163.com Abstract. OpenCASCADE provides a general transforma ...
- 深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域
× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关 ...
- google浏览器截图工具 Open Screenshot(代码截图)
有的时候特别想把自己写的代码保存为图片,但是代码的内容很长,用普通的截图工具只能一次一次的拼接起来,太麻烦了.这里使用了Google的截图插件,很好用. 或者使用360极速浏览器-->保存网页也 ...
- herbnate session.createSQLQuery(sql) 和 session.createQuery(sql)使用
public class DistributeDao implements Serializable{ private SessionFactory sessionFactory; public Se ...
- 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档
接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...
- L2 Population 原理 - 每天5分钟玩转 OpenStack(113)
前面我们学习了 VXLAN,今天讨论跟 VXLAN 紧密相关的 L2 Population. L2 Population 是用来提高 VXLAN 网络 Scalability 的. 通常我们说某个系统 ...