摘要: 回顾总结线程的创建: 三种:1.继承Thread类、2.实现Runnable接口、3.实现Callable接口 1 package com.thread.gaoji; 2 3 import java.util.concurrent.Callable; 4 import java.util.concu 阅读全文
posted @ 2020-02-04 19:57 断浮 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 使用线程池: 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中公共交通工具。 好处: 提高响应速度(减少了创建线程的时间) 降低资源的消耗(重复利用线 阅读全文
posted @ 2020-02-04 19:56 断浮 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 解决方式2: 并发协作模型"生产者/消费这模式"-->信号灯法 来判断一个标志位flag,如果为true,就让他等待、如果为false,就让他去通知另外一个人、把两人衔接起来,就像咱们的信号灯红灯停,绿灯行,通过这样一个判断方式,只要来判断什么瑞后让他等待,什么时候将他唤醒就ok。 1 packag 阅读全文
posted @ 2020-02-04 19:54 断浮 阅读(733) 评论(0) 推荐(0) 编辑
摘要: 解决方式1: 并发协作模型"生产者/消费者模式" >管程法 生产者:负责生产数据的模块(可能是方法,对象,线程,进程) 消费者:负责处理数据的模块(可能是方法,对象,线程,进程) 缓冲区:消费者不能直接使用生产者的数据,他们之间有个缓冲区,生产者将生产好的数据放入缓冲区,消费者从缓冲区拿出数据 思路 阅读全文
posted @ 2020-02-04 19:52 断浮 阅读(1031) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者模式: 之前学的线程都是一条一条往下执行的,互不相干,互不影响,最多在线程设置一个flag外部标志位,让线程停下来。但没有涉及到线程之间的协作和通信。怎么能让线程之间能够交流?怎么让我等待的时候,让你去做一些事情呢?这个就非常难了,join()、yield()、等等都做不到,于是乎,出现 阅读全文
posted @ 2020-02-04 19:51 断浮 阅读(239) 评论(0) 推荐(1) 编辑
摘要: Lock(锁): 从JDK5.0开始,Java提供了更强大的线程同步机制——通过显示定义同步锁对象来实现同步,同步锁使用Lock对象充当 java.util.concurrent.locks.Lock接口是控制多个线程对共享线程进行了访问的工具。锁提供了对共享资源的独占访问,每次只有一个线程对Loc 阅读全文
posted @ 2020-02-04 19:46 断浮 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 死锁: 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有"两个以上对象的锁"时,就可能会发生"死锁"的问题。 思路: 首先要有两个对象口红 Lipstick 类 和镜子 Mirror 类 然后需要 阅读全文
posted @ 2020-02-04 19:44 断浮 阅读(192) 评论(0) 推荐(0) 编辑
摘要: JUC并发包下的安全数组 1 package com.thread.syn; 2 3 import java.util.concurrent.CopyOnWriteArrayList; 4 5 //测试JUC安全类型的集合 6 public class TestJUC { 7 public stat 阅读全文
posted @ 2020-02-04 19:43 断浮 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 同步方法: 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提供一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法 和 synchronized 块 同步方法: public synchronized 阅读全文
posted @ 2020-02-04 19:41 断浮 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 案例一:火车站买票 思路: 1.首先要有一个买票的类BuyTicket多线程要实现Runnable接口,重写run()里面是买票, 2.买票就需要有票,定义一个票的变量 private int ticketNums = 10; 3.写一个买票的方法buy():首先你得判断是否有票,if(ticket 阅读全文
posted @ 2020-02-04 19:34 断浮 阅读(685) 评论(0) 推荐(0) 编辑
摘要: 线程同步:多个线程 操作 同一个资源 并发: 同一个对象 被 多个线程 同时 操作 万人同时购买100张票 两个人同时取一个账户的钱 线程同步: 现实生活中,我们会遇到 " 同一个资源,多个人都想使用"的问题,比如,食堂排队打饭,每个人都想吃饭,最好的解决办法就是,排队,一个一个来。 处理多线程问题 阅读全文
posted @ 2020-02-04 19:01 断浮 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 守护(daemon)线程: 线程守护分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 有一些作用,如,后台记录操作日志,监控内存,垃圾回收等待.. 人生不过3万天 1 package com.thread.state; 2 3 //测试守护线程 4 //上帝守护 阅读全文
posted @ 2020-02-04 18:55 断浮 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 线程优先级: Java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。 线程的优先级用数字表示,范围从1~10. Thread.MIN_PRIORITY = 1; Thread.MAX_PRORITY = 10; Thread.NORM_ 阅读全文
posted @ 2020-02-04 18:53 断浮 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 线程状态: new一个Thread对象时候就处于新生状态了。 调用start方法,立即进入就绪状态。等待cpu的调度 cpu调度时,进入运行状态。cpu调度谁看心情 运行时,调用sleep(),wait()或同步锁定时,线程进入阻塞状态,阻塞解除后进入就绪状态 如果正常执行完毕进入死亡状态。 线程方 阅读全文
posted @ 2020-02-04 18:52 断浮 阅读(257) 评论(0) 推荐(0) 编辑
摘要: Lambda表达式 1.概述 λ希腊字母表中排序第十一位的字母,英文名称为Lmbda 它的出现是为了简化,以前的代码很繁琐简化成 new Thread(()-> System.out.println("多线程学习。。。")).start(); 其实质属于函数式编程的概念。 2.为什么要使用lambd 阅读全文
posted @ 2020-02-04 18:41 断浮 阅读(820) 评论(0) 推荐(0) 编辑
摘要: 静态代理: 代理,大家应该都不陌生,就是我帮你去做一些事情。比如说,结婚。 现在结婚,大家都去找婚庆公司,谁结婚啊,是不是你结婚啊。你结婚,但是你,你什么都不用去做,婚庆公司帮你。帮你布置现场,帮你去把所有人招过来。帮你选地址,给你布置场景,等等。反正是它帮你做的。 最后,结婚的人是你,你就是一个真 阅读全文
posted @ 2020-02-04 18:35 断浮 阅读(495) 评论(1) 推荐(0) 编辑
摘要: 方式三、实现Callable接口,理解即可 实现Callable接口,需要返回值类型 重写call方法,需要抛出异常 创建目标对象 创建执行服务: ExecutorService ser =Executors.newFixedThreadPool(3); 提交执行: Future<Boolean> 阅读全文
posted @ 2020-02-04 18:31 断浮 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 案例:龟兔赛跑-Race 1、首先来个赛道的距离,然后要离终点越来越近 2、判断比赛是否结束,结束就来看下谁胜利了 3、胜利后,打印出胜利者 4、龟兔赛跑开始,相当于两条线程开始跑了,看谁先到最后一步 5、然后,因为故事中是乌龟赢的,兔子要睡觉,所以我们来模拟兔子睡觉 6、最后,乌龟赢得了比赛 实现 阅读全文
posted @ 2020-02-04 18:28 断浮 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 发现问题,多个线程操作同一个资源的情况下,线程不安全,数据紊乱 1 package com.thread.demo01; 2 3 //多个线程同时操作同一个对象 4 //买火车票的例子 5 6 //发现问题,多个线程操作同一个资源的情况下,线程不安全,数据紊乱 7 public class Test 阅读全文
posted @ 2020-02-04 18:27 断浮 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 方式二、实现Runnable接口,学习提示:查看JDK帮助文档 定义MyRunnable类实现Runnable接口 实现run()方法,编写线程线程执行体 创建线程对象,调用start()方法启动线程 1 package com.thread.demo01; 2 3 //创建线程方式二: 实现Run 阅读全文
posted @ 2020-02-04 18:26 断浮 阅读(192) 评论(0) 推荐(0) 编辑