
多线程
文章平均质量分 65
Pure_Man_Ben
这个作者很懒,什么都没留下…
展开
-
多线程_01_继承Thread
创建多线程有三种方法:第一种是继承Thread类+重写run方法,第二种实现Runnable接口+重写run方法,第三种实现Collection接口。多用第二种,少用 第一种,第三种基本不用。第一种方法:继承Thread首先创建一个类StartThread01 继承Thread类,重写run方法,然后在main方法启动线路,先创建子类对象,然后调用子类对象的start方法启动线程,由cpu安排...原创 2019-08-25 17:21:14 · 238 阅读 · 0 评论 -
多线程_15_并发_同步_三大经典案例
线程同步(synchronized):在一个多线程环境中,我们要保证数据的准确性和安全性,同时还要提高它的性能。并发:指同一对象多个线程同时操作,三个来抢票,假如B线程来了ticketNums=1,不少于等于0,然后延时200毫秒,此时还没有修改ticketNums的数据,还是等于1,然后A进来了,ticketNums的值等于1,也延时毫秒,然后C也进来了,延时200 毫秒,然后延时一过B就才把数据1拿走了,然后就没...原创 2019-08-30 10:02:15 · 239 阅读 · 0 评论 -
多线程_18_并发_同步_快乐影院_快乐火车票
案例一:这个案例是一个电影院选座,比如ab两个人同时选两个座,a选两个座,b选一个座,电影院就剩两个座,比如a先进去的,把两座选走,那b就会报出票失败,票已售罄。public class HappCinema { public static void main(String[] args) { Cinema c = new Cinema(2,"happy cb"); new Threa...原创 2019-09-03 15:50:36 · 5100 阅读 · 0 评论 -
多线程_20_并发容器
import java.util.concurrent.CopyOnWriteArrayList;关键字:CopyOnWriteArrayListpackage com.cb.thread.day04;/* * 线程安全:操作并发容器 */import java.util.ArrayList;import java.util.List;import java.util.concu...原创 2019-09-03 16:09:04 · 177 阅读 · 0 评论 -
多线程_21_并发_死锁_产生与解决
在一个同步块同时持有两个以上对象的锁时,就可能会发生死锁的问题,死锁就是各自抱着资源不释放,比如一手交一手交货,商家说你给我钱我给你货,顾客说你给我货我给你钱,大家都不信任对方,造成尴尬的局面。还有就是小丫拿着镜子,想要口红,大丫拿的口红想要镜子,相互之间不礼让,就会造成死锁。仿写小丫和大丫这个案例package com.cb.thread.day05;/* * 死锁:过多的同步可能造成...原创 2019-09-04 10:12:07 · 407 阅读 · 0 评论 -
多线程_22_并发协作_生产者消费者模式
生产者消费者模式我们都在肯德基里面吃过东西,kfc一般都很忙,别问我是怎么知道的,我以前可是kfc优秀员工,他们先把汉堡、薯条、鸡翅什么都准备好放在一个架子上,然后顾客过来买东西,前台员工只需要把顾客点的东西装起来拿给顾客就好了。那个架子就是图上的库。这样就可以实现解耦,我生产我的东西,你买你的东西,我们互不干涉。生产者消费者有两解决方式:第一种管程法,生产者只生产数据,放进入消息队列里面...原创 2019-09-04 15:25:02 · 212 阅读 · 0 评论 -
多线程_23_并发协作_管程法_信号灯法
并发协作模型生产者消费者模式的第一种管程法,它的核心要点是加了缓冲区,有了缓冲区之后,生产者和消费者之间解耦了,比如超市的中间商,生产者向中间商发商品,超市向中间商进商品,而生产者并不知道商品买给谁了。分析这个模型有几个角色:第一个角色生产者,第二个角色消费者,它们两个是多线程,第三个是并发容器也就是缓冲区,第四个数据,比如汉堡。生产者往里面填数据,消费者往外面拿数据,所以缓冲区的并发操作存或...原创 2019-09-05 10:55:54 · 247 阅读 · 0 评论 -
多线程_24_定时调度
任务定时调度,说白了就是闹钟,在某一个有规律的时间点干某件事;比如晚上十二点钟把程序跑起来,到了晚上十二点跑去公司把程序运行起来,有了这个任务定时调度就不用了,到点了,程序自动跑起来,可以指定一个时间让它自己动起来。通过timer和timetask,就能实现定时启动某个线程。案例package com.cb.thread.day06;import java.util.Calendar;...原创 2019-09-05 15:58:08 · 197 阅读 · 0 评论 -
多线程_14_基本信息
线程常用其他方法练习 :package com.cb.thread.day03;public class InfoTest { public static void main(String[] args) throws InterruptedException { //查看线程是否活着 System.out.println(Thread.currentThread().isA...原创 2019-08-29 10:01:15 · 177 阅读 · 0 评论 -
多线程_13_守护线程
线程分为两大类:用户线程和守护线程(daemon),一般默认为用户线程,守护线程不看虚拟机的脸色,而是看用户线程的脸色,虚拟机必须确保用户线程执行完毕,守护线程是为用户线程服务的,不用等它执行完毕,它默默的为我们服务比如后台日志,监控内存。练习:package com.cb.thread.day02;/* * 守护线程:是为用户线程服务的;jvm停止不用等待守护线程执行完毕 * 默认:...原创 2019-08-28 15:58:27 · 170 阅读 · 0 评论 -
多线程_02_实现Runnable
创建线程方式二(推荐使用)1.创建:实现Runnable + 重写run2.启动:创建实现类对象+Thread对象 + start推荐使用这种方法,可以避免继承的局限性,优先使用接口以下代码可以参考package com.cb.thread;/* * 创建线程方式二 * 1.创建:实现Runnable + 重写run * 2.启动:创建实现类对象+Thread对象 + start...原创 2019-08-25 18:14:11 · 180 阅读 · 0 评论 -
多线程_03_抢票_龟兔赛跑
学过创建线程的二种方法,一是继承Thread类,重写run方法,第二种是实现Runnble接口,推荐使用第二种,这样能够避免单继承的局限性。接下来用第二种实现Runnble接口写下案例,模拟抢票package com.cb.thread;/* * 共享资源,并发(线程安全) */public class Web12306 implements Runnable{ private ...原创 2019-08-25 19:37:42 · 305 阅读 · 0 评论 -
多线程_04_了解Callable
创建多线程的第三种方式:实现Callable,重写call方法在这里只是了解,因为不属于我这初级菜鸟要掌握的任务,这个内容属于高级并发编程jvc编程。案例package com.cb.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import ja...原创 2019-08-26 08:19:08 · 182 阅读 · 0 评论 -
多线程_07_状态
线程有五大状态:新生 就绪 运行 阻塞 死亡大家可以把线程看作nba比赛,每个线程代表一个nba球员,新生状态表示这个球员进入首发球员,就绪状态表示球员入场了,运行状态假设一个球员带球进攻,这个带球就是这个线程获得cpu的调度,带球进攻就是运行状态,在带球进攻时受到对方球员的侵犯,倒在了地上,我们看到阻塞状态,然后爬起来不可能立马带球跑,而是重新进入就绪状态,如果这个球员受伤了,或者身体不...原创 2019-08-27 07:56:54 · 184 阅读 · 0 评论 -
多线程_06_lambda推导
lambda表达式:简化线程(用一次)的使用lambdaj表达式在jdbk8以后才能用看代码package com.cb.thread;/* * lambda推导 */public class lambdaTest01 { //2.内部类 static class Like2 implements ILike{ @Override public void lambd...翻译 2019-08-27 07:57:09 · 192 阅读 · 0 评论 -
多线程_09_暂停sleep
sleep:指定当前线程阻塞的毫秒数,也就是休眠睡觉,这个睡觉是抱着资源睡觉。sellp模拟网络延时,放大了发生问题的可能性package com.cb.thread.day02;/* * sleep模拟网络延时,放大发生错误的可能性 */public class BlockedSleep01 { public static void main(String[] arg...原创 2019-08-27 08:48:06 · 330 阅读 · 1 评论 -
多线程_10_礼让yield
礼让线程:让当前正执行线程从运行状态转入就绪状态,然后让cpu重新调度,而不是进入阻塞状态。这样可以避免当前线程占用cpu过久,这个yield和sllep一样的是,都是静态方法。案例package com.cb.thread.day02;/* * yield 礼让线程,暂停线程,然后直接进入就绪状态不是阻塞状态 */public class YieldDemo01 { publi...原创 2019-08-27 09:31:44 · 225 阅读 · 0 评论 -
多线程_11_插队join
join:合并线程,也可以叫插队线程,让此线程执行完成后,再执行其他线程,其他线程阻塞就像上图里面的黄色的车一样,黄色的车插队,非要等黄色的车走了后面的车才能走,后面的车被阻塞了。看代码package com.cb.thread.day02;/* * join:合并线程 插队线程 */public class BlockedJoin01 { public static voi...原创 2019-08-28 10:01:22 · 236 阅读 · 0 评论 -
多线程_12_优先级
优先级(priority):在多个线程同时执行时,线程的调度器会根据线程的优先级,优先调用级别高的线程,**优先调**用不代表绝对的前后顺序,线程级别高的先调用的概率就大,线程级别低的先调用的概率就小,就相当买彩票,优先级低的相当买一张彩票,优先级高的相当于买一百张,所以优先级只代表一个概率大小。![在这里插入图片描述](https://img-blog.csdnimg.cn/201908281...原创 2019-08-28 11:28:27 · 228 阅读 · 0 评论 -
多线程_25_happenbefore
Happenbefore:指令重排,就是代码与代码之间没有相互的联系,没有相互的依赖,就是我的把后面的结果往前提不会影响整个的结果,这就叫做指令重排。由上图来理解机器是怎么来编译和运行代码的。先将代码翻译成指令。第二步,从对应的寄存器中拿出对应的值,也就是工作空间拷贝主存的数据,第三步,这两个值计算得到结果124第四步,将结果同步到主存里面一条指令执行的步骤:1、获取指令;2、...原创 2019-09-07 15:17:01 · 242 阅读 · 0 评论