并发编程的基础概念

九鹤
• 阅读 1281

什么是线程 ? 什么是进程? java可以开启线程吗?不能 因为Java无法直接操硬件,他是运行在虚拟机上面的, 什么是并发? 什么是并行? 并发就是多个线程去操作一个资源。 并行是多个线程同时行,但是操作的资源不是同一个。 线程的六个状态 new (诞生) runnable (运行)Blocked(阻塞)waiiiing(等待) Tiem -waiing(超时等待) TERMINATED终止 wait 和seleep 区别 wait 来着objiet seleep 来自Thread wait会释放锁 seleep不会释放锁 wait 作用用同步代码块中 seleep 任何地方 wait 不需要捕获异常 seleep需要

Look (线程是一个单独的资源类) 传统锁 synchionized 本质——队列加锁 look是接口 接口有实现类 读锁 写锁 可重复锁 公平锁 ——先来后到 非公平锁 可以插队

look 三步 1 new look 2 加锁 3 解锁 Synchronied和look区别 1 S是关键字 look是类 2 S自动无法判断锁的状态 3 S会自动释放锁 ,Look锁必须手动释放 如果不手动释放 会造成死锁问题 4 S如果线程一阻塞了 线程二会死等,look锁不会等 5 S开重入锁 不可中断 非公平 :look 可重入 可以判断
生产者和消费者问题 有两个线程 如果一个线程完成对资源的操作 ,通知其他线程继续对资源的操作 如果是多线程 那么就会造成虚假唤醒 具体的业务代码用whlie 来判断 JUC里面再线程的唤醒里可以具体设置要换线哪一个线程 Condition 给每一个线程配置一个监听器 八锁现象
锁的是存在 锁的对象收 方法调用者 两个方法用的是谁先拿到谁先执行 普通S锁的是方法调用者 static 、锁的是该类的clas锁的是全局唯一 new 锁的this static 锁的的全局唯一 集合类不安全 list是线程不安全的 如何实现线程安全呢 1 创建vector(安全的) 2 工具类 所有集合都继承一个Connection Connection .Synchornized(new ArrayLIst<>()); 3 new CopyoOnwriteArrayList<>();
CopyoOnwrite 写入时复制 COW优化策略 写入的时候复制一个数组 写完再插入 concurrentodifictioanEXcptioan 并发修改异常l BlockingQueue 消息队列 Callable 1 可以有返回值 2 可以抛出异常 3 方法不同 CountDownluth -辅助工具类(计算器) 指定一定的线程跑完之后(计数器归零)再往下执行 常用于必须执行的线程的任务

队列是有大小的 再创建队列的时候必须指定队列的大小 队列和list是平级的实现Coonetion 我们创建的队列为普通队列 元素保持先进先出的原则 当队列里面的元素满了 再往里面添加元素会出现异常,从队列里面的拿元素,如果全部拿完也会出现异常 队列里面有四组API设置 这两种异常

第一种 add();//添加元素 remove();//移除或者取出元素 先进先出 会拿出第一个放入的元素
第一种会抛出异常

第二种 添加 offer 移除 poll //有异常不会抛出异常 会返回false 没有异常就发返回true。如果队列里面没有元素就会返回一个null; 第三种 put 添加 take 移除 // 阻塞 当队列里面的元素满了的时候 再添加一个元素的时候 会等 等到队列里面会空出来一个位置 吧这个元素添加进去 这时候从程序才算结束 take也是一样 这样写程序容易崩 第四种 再第三种上面添加了时间限制 如果超过时间限制 就结束等待 同步队列 SynchronousQueue BlockingQunene 没有容量 put take 必须 等待取出来之后 才能往里面添加一个元素即容量最大为一

线程池
好处降低资源消耗 提高响应速度 方便管理 三大方法
ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程 ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一 个固定的线程池的大小 ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩 的,遇强则强,遇弱则弱

阿里开发手册中规定不要使用Java自带的线程池 要根据服务器性能和数据的处理效果来设计一个线程池

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java多线程常见问题
Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Bl
Wesley13 Wesley13
3年前
4、jstack查看线程栈信息
1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6
Wesley13 Wesley13
3年前
Java多线程
JavaThread状态NEW创建被创建,但是还没有开始的线程,也就是还没有调用start()方法。RUNNABLE运行就绪可运行状态,在JVM中执行,但是可能等待操作系统CPU资源。BLOCKED阻塞线程阻塞等
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
3年前
Java 并发编程:进程、线程、并行与并发
一谈到Java并发编程,我们一般就会联想起进程、线程、并行、并发等等概念。那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢?进程与线程进程是指程序的一次动态执行过程,通常我们说计算机中正在执行的程序就是进程,每个程序都会对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,它是操作系统资源分配最小单
Wesley13 Wesley13
3年前
Java并发编程:进程、线程、并行与并发
一谈到Java并发编程,我们一般就会联想起进程、线程、并行、并发等等概念。那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢?01 进程与线程进程是指程序的一次动态执行过程,通常我们说计算机中正在执行的程序就是进程,每个程序都会对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,它是操作系
Wesley13 Wesley13
3年前
Java线程与多线程
1线程与多线程1.1线程是什么?线程(Thread)是一个对象(Object)。用来干什么?Java线程(也称JVM线程)是Java进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。Java程序采用多线程方式来支持大量的并发请求处理,程序如果在
深入浅出线程池 | 京东云技术团队
一、线程1、什么是线程线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。2、如何创建线程2.1、JAVA中
九鹤
九鹤
Lv1
男 · 合肥 · Java开发
过尽征鸿来尽燕,故园消息茫然。
文章
4
粉丝
0
获赞
0