Java并发基础概念
Java并发基础概念
线程和进程
线程和进程都能实现并发,在java编程领域,线程是实现并发的主要方式
每个进程都有独立的运行环境,内存空间。进程的通信需要通过,pipline或者socket
线程共享进程的运行环境,创建线程更加轻量级
线程
创建线程的方式
- 直接创建和管理Thread对象,在需要异步任务的时候创建Thread
- 使用抽象线程管理器,把task交给executor执行
定义和启动线程
Thread th = new Thread();
th.start();
暂停线程
Thread.sleep(1000)
中断
中断线程自己实现,可以接收或者不接受中断
查询线程的是否中断了
Thread.interrupted()
中断一个线程
thread.interrupt()
Join
等待线程结束
t.join() 当前线程等待t线程结束再执行后面的操作
同步
1.线程干涉
多个线程并发访问同一个资源,会导致结果不一致不可预测
2.内存可见性
多个线程并发,一个线程修改一个变量的时候,其他线程不一定能读到修改后的值
3.同步方法
同步方法和同步代码块
同步方法或者同步代码块的代码,可以防止线程干扰和保证内存可见性
volatile
保证变量的可见性,每个线程都能及时获取修改后的值
活性
1.死锁
场景
- 线程1持有锁A ,请求锁B
- 线程2持有锁B,请求锁A
2.饥饿
共享资源被其他线程长时间占用,导致其他线程不能执行
wait & notifiy
类之间的进度同步
如果一个线程依赖于其他线程的进度,可以使用wait暂停线程
条件达成后其他线程调用notify使wait状态的线程恢复执行
不可变对象
一个对象一旦被创建之后不可更改,即为不可变对象
不可变对象是线程安全的,因为数据都是只读的
线程安全:可以被并发访问
高级并发对象
简化编写并发程序的难度
- Lock对象
- Executor
- 并发容器
- 原子类
- ThreadLocalRandom
Lock对象
比隐式锁提供了额外的功能
Executor 框架
ExecutorService 管理任务和生命周期
ScheduledExecutorService 周期性的执行任务,(定时任务)
Thread Pool Executor框架实现了线程池,固定数量的线程池,单线程池等
并发容器
并发环境下的容器类
原子类
为基本类型提供了常用的原子操作
Java并发基础概念的更多相关文章
- Java 并发基础
Java 并发基础 标签 : Java基础 线程简述 线程是进程的执行部分,用来完成一定的任务; 线程拥有自己的堆栈,程序计数器和自己的局部变量,但不拥有系统资源, 他与其他线程共享父进程的共享资源及 ...
- Java多线程--基础概念
Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...
- java并发基础(二)
<java并发编程实战>终于读完4-7章了,感触很深,但是有些东西还没有吃透,先把已经理解的整理一下.java并发基础(一)是对前3章的总结.这里总结一下第4.5章的东西. 一.java监 ...
- java并发基础(五)--- 线程池的使用
第8章介绍的是线程池的使用,直接进入正题. 一.线程饥饿死锁和饱和策略 1.线程饥饿死锁 在线程池中,如果任务依赖其他任务,那么可能产生死锁.举个极端的例子,在单线程的Executor中,如果一个任务 ...
- java并发基础及原理
java并发基础知识导图 一 java线程用法 1.1 线程使用方式 1.1.1 继承Thread类 继承Thread类的方式,无返回值,且由于java不支持多继承,继承Thread类后,无法再继 ...
- 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...
- java并发基础(一)
最近在看<java并发编程实战>,希望自己有毅力把它读完. 线程本身有很多优势,比如可以发挥多处理器的强大能力.建模更加简单.简化异步事件的处理.使用户界面的相应更加灵敏,但是更多的需要程 ...
- 【Java并发基础】利用面向对象的思想写好并发程序
前言 下面简单总结学习Java并发的笔记,关于如何利用面向对象思想写好并发程序的建议.面向对象的思想和并发编程属于两个领域,但是在Java中这两个领域却可以融合到一起.在Java语言中,面向对象编程的 ...
- Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...
随机推荐
- 七、并发容器ConcurrentHashMap
一.简介 我们知道,HashMap是线程不安全的.而HashTable是线程安全的,但是JDK已经不建议使用HashTable,它已经被作为废除的实现. 在JDK并发包里面,ConcurrentHas ...
- <a>标签中href="javascript:;"的意思
<a> 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段. 这里的href=&q ...
- 字符串数组中含有json转换
[{'a':'1','b':'2'},{'c':'3','d':'4'}]" 解决 import net.sf.json.JSONArray; import net.sf.json.JSON ...
- 将Windows上的Oracle迁移至Linux
迁移前提: 1.在安装Linux数据库实例时,注意选择的编码格式要与Windows的数据库实例一致. 迁移步骤 1.检查Linux上数据库实例的编译格式 SQL> select userenv( ...
- UOJ#414. 【APIO2018】新家
传送门 首先二分答案 \(mid\),问题变成求区间 \([l-mid,r+mid]\) 在该年份的不同类型个数为 \(k\) 关于年份的限制可以离线下来 现在的问题就是区间数颜色,一个套路就是维护每 ...
- jquery特效:无缝向上循环滚动列表
效果呈现 整个列表间隔设定的时间向上移动一个item的高度 html结构: <div class="slide-title"> <span>title1&l ...
- Ajax实现表格实时编辑
如果我们的对于一个表格中所有的数据都能在本页进行操作那该是多酷炫的一件事(用起来炒鸡爽)! 用Ajax就可以实现这个功能啦.废话不多说,下面贴出我写的demo吧哈哈.我用的TP框架(3.2)比较习惯啦 ...
- Python中os.listdir的排序问题
上周应别人要求,使用python批量修改文件名称.文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接可以用listdir来遍历每个文件来修改更加通用一些.但是看了os.listdir ...
- zTree 学习笔记之(一)
zTree 学习笔记之(一) 简介 zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 到底有哪些具体的优点,可以参见官网 ...
- 两种开源聊天机器人的性能测试(二)——基于tensorflow的chatbot
http://blog.csdn.net/hfutdog/article/details/78155676 开源项目链接:https://github.com/dennybritz/chatbot-r ...