Java多线程系列
Statistic_Code
记录学习点滴,分享生动观点
展开
-
Java多线程系列(二十四):线程池
第23节:线程池1.理论整理经常创建和销毁线程,会使用特别大的资源;提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁地创建销毁,实现重复利用.类似生活中的公共交通工具;使用线程池的优点:(1)提高效应速度;(2)降低资源消耗;(3)便于线程管理corePoolSize 核心池大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止.2.实践声明:本系列是"狂神说java"教程的个人学习笔原创 2020-07-30 10:07:07 · 111 阅读 · 0 评论 -
Java多线程系列(二十四):信号灯法-以演员观众为例
第24节:信号灯法实践测试生产者消费者问题2:信号灯法,标志位解决声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~原创 2020-07-30 09:51:52 · 147 阅读 · 0 评论 -
Java多线程系列(二十三):生产者消费问题+管程法
第23节:生产者消费问题+管程法1.理论整理生产者:负责生产数据的模块;消费者:负责处理数据的模块;缓冲区:消费者不能直接使用生产者的数据,他们之间有个缓冲区.2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~...原创 2020-07-29 11:14:26 · 144 阅读 · 0 评论 -
Java多线程系列(二十二):Lock锁
第22节:Lock 锁1.理论整理Lock是显式锁(手动开启,手动关闭,千万不能忘记关闭锁),synchronized是隐式锁,出了作用域会自动释放;Lock只能锁代码块,synchronized可以锁代码块和方法;2.实践声明:本系列是"狂神说Java"教程的个人学习笔记,无意侵权~...原创 2020-07-29 10:26:27 · 156 阅读 · 0 评论 -
Java多线程系列(二十一):死锁
第21节:死锁1.理论整理 A拥有B想要拥有的,B拥有A想要拥有的,两者互不让步就可能会一直僵持下去; 某一个同步块同时拥有"两个以上对象的锁"时,就可能发生死锁问题。产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用;请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;不剥夺条件:进程已获得的资源,在未使用完之前不能强行剥夺;循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。2.实践声明:本系列是"狂神说java"教程的个原创 2020-07-28 12:48:33 · 84 阅读 · 0 评论 -
Java多线程系列(二十):介绍JUC中的安全类-CopyOnWriteArrayList-不必用synchronized锁线程了
第20节:CopyOnWriteArrayList2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权原创 2020-07-28 12:02:07 · 130 阅读 · 0 评论 -
Java多线程系列(十九):同步方法及同步块
第19节:同步方法及同步块1.理论整理从上一节中可以看到Java中多线程是不安全的,比如多人同时买票,票数会出现负数的情况;多人取钱,钱数会出现负数;多个线程操作同一个列表会出现多个线程覆盖列表统一地方的错误等;Java中提供了解决该问题的办法:锁机制。具体而言, 锁住当前类的话可以在方法的开头public后加上synchronized;锁住具体对象(比如只锁景区的厕所而不是整个景区)时可以用synchronized(对象){代码块}.2.实践买票问题取钱问题列表问题原创 2020-07-28 11:47:33 · 125 阅读 · 0 评论 -
Java多线程系列(十八):线程同步机制+三个线程不安全的例子
第18节:线程同步机制1.理论整理并发: 同一个对象被多个线程同时操作;由于同一进程的多个线程共享同一块存储空间,会发生访问冲突问题.为了访问的正确性,在访问时加入了锁机制(synchronized) 。当一个线程获得对象的排它锁时,独占资源,其他线程必须等待,使用后释放锁即可。一个线程持有锁会导致其他所有需要此锁的线程挂起;在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题;如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题2原创 2020-07-27 12:31:08 · 135 阅读 · 0 评论 -
Java多线程系列(十七):守护线程
第17节:守护线程1.理论整理线程分为:守护线程和用户线程;虚拟机需要等待用户线程执行完,而不必等待守护线程完成.常见的守护线程:后台记录操作日志,监控内存,垃圾回收等2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权...原创 2020-07-27 10:21:18 · 94 阅读 · 0 评论 -
Java多线程系列(十六):线程的优先级
第15节:线程的优先级1.理论整理Java提供一个线程调度器来监视启动后进去就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行.线程的优先级用数字表示,范围从1~10;Thread.MIN_PRIORITY=1;Thread.MAX_PRIORITY=10;Thread.NORM_PRIORITY=5;使用一下方式改变或获取优先级:getPriority().setPriority(int x)2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵原创 2020-07-26 12:08:26 · 88 阅读 · 0 评论 -
Java多线程系列(十五):观测线程状态
第15节:观测线程状态1.理论整理线程状态:Thread.Statenew: new Thread() 后处于新生状态,尚未启动;Runnable: 在Java虚拟机中执行的线程处于此状态;Blocked: 被阻塞,等待监视器锁定的线程处于此状态;Waiting: 等待另一个线程执行特定动作的线程处于此状态;Time_Waiting: 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态;Terminated: 退出的线程处于此状态.2.实践声明:本系列是"狂神说jav原创 2020-07-26 11:18:34 · 252 阅读 · 0 评论 -
Java多线程系列(十四):线程强制执行(join)
第14节:线程强制执行(join)1.理论整理Join合并线程,待此线程完成后,再执行其他线程,其他线程阻塞;可以想象成让run()中的代码插队到主线程中2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~...原创 2020-07-26 10:28:24 · 190 阅读 · 0 评论 -
Java多线程系列(十三):线程礼让(yield)
第13节:线程礼让(yield)1.理论整理线程礼让,让当前正在执行的线程暂停,但不阻塞;将线程从运行状态转为就绪状态;让CPU重新调度,礼让不一定成功,看CPU心情。举例: 正在运行的线程A礼让线程B只是说线程A从CPU中出来和线程B同为就绪状态,但至于接下来CPU会不会还让线程A运行就不一定了.2.实践编写实现Runnable接口的方法,重写run()方法时加入礼让代码,在main线程中创建多线程看礼让结果声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~原创 2020-07-25 11:05:43 · 1035 阅读 · 2 评论 -
Java多线程系列(十二):线程休眠(sleep)
第11节:线程休眠(sleep)1.理论整理sleep指当前线程阻塞的毫秒数(1000ms=1s);sleep存在异常InterruptException;sleep时间到达后线程进入就绪状态;sleep可以模拟网络延时,倒计时等;每一个对象都有一个锁,sleep不会释放锁.2.实践模拟网络延迟实现倒计时一定间隔的打印当前系统时间–休眠声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~...原创 2020-07-25 10:47:25 · 384 阅读 · 0 评论 -
Java多线程系列(十一):线程停止
第11节:线程停止1.理论整理线程状态:线程方法:停止线程:(1)不推荐使用JDK提供的stop()、destroy方法,已经被废弃了;(2) 推荐线程自己停止,建议使用一个标志位进行终止变量,当flag=false时,自动终止线程运行。(3) 可以写一个stop方法,一调用就更改flag的true为false.2.实践方式1:设置标志位flag和转换标志位的方法,在main方法中建立转换机制方式2:自己在run()方法中就设置停止条件声明:本系列是"狂神说jav原创 2020-07-25 09:58:29 · 86 阅读 · 0 评论 -
Java多线程系列(十):Lambda表达式
第10节:Lambda表达式1.理论整理λ是什么?λ是希腊字母,英文名为Lambda;为什么要用lambda表达式?为什么要用lambda表达式?2. 避免匿名内部类定义过多;3. 可以让你的代码看起来很简洁;4. 去掉了一堆没有意义的代码,只留下核心的逻辑学习lambda表达式要理解些什么呢?5. 理解Functional Interface(函数式接口)6. 函数式接口的定义:任何接口,如果只包含唯一 一个抽象方法,那么它就是一个函数式接口7. 对于函数式接口,我们可以通原创 2020-07-24 10:21:44 · 194 阅读 · 0 评论 -
Java多线程系列(九):以结婚的例子说明静态代理模式
第9节:静态代理1.理论整理静态代理模式:1.真实对象和代理对象都要实现同一个接口2.代理对象要代理真实角色3.好处就是代理对象可以做很多真实对象做不了的事个人理解:考虑代理的过程,肯定要有一个真实对象,比如结婚的你;还要有一个代理对象,比如婚庆公司;既然是代理,你和婚庆公司都应该有一个共同的目标,比如结婚;你找代理的原因是想让代理完成一些琐事,而你可以只做参加婚礼这一件事;代码层面上,你和婚庆公司都应实现结婚这个借口,只不过婚庆公司要比你多做很多事;代码层面上,你只需要被传入代理原创 2020-07-23 11:32:38 · 182 阅读 · 2 评论 -
Java多线程系列(八):实现callable接口
第8节:实现callable接口1. 理论整理实现callable接口需要返回值类型;重写call方法,需要抛出异常;创建目标对象;创建执行服务:Executors.newFixedThreadPool(线程个数)Executors.newFixedThreadPool(线程个数)Executors.newFixedThreadPool(线程个数)提交执行:Future<Boolean>result1=ser.submit(创建的callable类的实例化对象)Future<原创 2020-07-23 10:36:17 · 155 阅读 · 0 评论 -
Java多线程系列(七):实践-龟兔赛跑
第7节:实践-龟兔赛跑1.思路分析: 乌龟和兔子相当于一条路上的两侧独立在跑,需要用两条线程来同时模拟,可以通过:【将实现Runnable接口的类分别传递给名为兔子和乌龟的Thread实例化对象,实现多线程同时跑。】 另外还可以通过Thread.sleep()模拟兔子休眠.2.实践声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~...原创 2020-07-22 11:48:05 · 335 阅读 · 0 评论 -
Java多线程系列(六):初识并发问题-抢票实践
第6节:初识并发问题-抢票实践小结下前面讲的继承Thread类和实现Runnable接口.继承Thread类:子类继承Thread类具备多线程能力;启动线程:子类对象.start()不建议使用:避免OOP单继承的局限性实现Runnable接口:4. 实现Runnable接口具有多线程能力5. 启动线程:传入目标对象+Thread对象.start()6. 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。实践-抢票问题思路分析:多人抢票,涉及多线程,可以通过实原创 2020-07-22 10:52:38 · 435 阅读 · 1 评论 -
Java多线程系列(五):实现Runnable接口
第5节:实现Runnable接口概述: 调用Thread需要重写其中的run()方法,一种是继承Thread-重写run()方法-调用start();另一种是实现(implements)一个需要重写run()方法的接口(Runnable接口就是这样的一种接口),然后将实现这个接口的类传递给Thread实例化对象 : new Thread(实现Runnable接口的类名),之后还是调用start: 对象.start(). 相比继承Thread,更推荐Runnable对象,因为Java单继承具有局限性原创 2020-07-21 11:34:34 · 361 阅读 · 0 评论 -
Java多线程系列(四):多线程下载多张图片-[继承Thread-重写run()-调用start()]
第4节:网图下载案例:下载图片基本思路 : 写一个下载器 – 将下载器放进改写的run()方法中 – new出多个具有run方法的对象 – 在main()线程中用start()实现多线程调用.第一步: 写一个下载器第二步: 将下载器放进重写的run()方法中第三步: 创建run()方法中需要的属性,通过构造器传递,达到动态接收的效果第四步: 在main() 线程中new出多个具有run()方法的对象,通过start()开启多线程图片下载任务声明:本系列是"狂神说java"教程原创 2020-07-21 10:42:22 · 328 阅读 · 0 评论 -
Java多线程系列(三):继承Thread类
第3节:继承Thread类1.理论整理三种创建方式:Thread class - 继承Thread类Runnable接口- 实现Runnable接口Callable接口:实现Callable接口Thread1.线程不一定立即执行,CPU安排调度2.实践创建线程方式一: 继承Thread类,重写run()方法,调用start()方法开启线程;补充:普通方法调用run()和多线程调用run()的区别:声明:本系列是"狂神说java"教程的个人学习笔记,无意侵权~..原创 2020-07-20 11:22:45 · 126 阅读 · 0 评论 -
Java帮助文档网址:http://www.cjsdn.net/Doc/JDK60/java/lang/Thread.html
http://www.cjsdn.net/Doc/JDK60/java/lang/Thread.html原创 2020-07-20 10:44:04 · 217 阅读 · 0 评论 -
Java多线程系列(二):线程、进程、多线程
第2节:线程、进程、多线程1.理论整理程序是指令和数据的集合,是一个静态概念;进程是程序的一次执行过程,是一个动态的概念线程就是独立的执行路径,是CPU调度和执行的单位;一个进程中可以包含多个线程,一个进程中至少有一个线程很多多线程是模拟出来的,CPU通过迅速切换任务给我们造成了同时执行的错觉;真正的多线程是指有多个CPU,即多核;main()称之为主线程,为系统入口,用于执行整个程序;线程的运行由调度器(CPU)安排,先后顺序不能人为干预;线程会带来额外开销,如CPU调度时间,并发控原创 2020-07-20 10:29:16 · 78 阅读 · 0 评论 -
Java多线程系列(一):java多线程概述
第一节:java多线程概述学习目录:1. 线程简介2. 线程实现(重点)3. 线程状态4. 线程同步(重点)5. 线程通信问题6. 高级主题原创 2020-07-20 09:53:01 · 76 阅读 · 0 评论