摘要:
线程池 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。 可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 好处: 提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利用线 阅读全文
posted @ 2021-04-25 15:03
saxon宋
阅读(16)
评论(0)
推荐(0)
摘要:
线程协作 生产者消费者 应用场景 : 生产者和消费者问题 假设仓库中只能存放一件产品 , 生产者将生产出来的产品放入仓库 , 消费者将仓库中产品取走消费 . 如果仓库中没有产品 , 则生产者将产品放入仓库 , 否则停止生产并等待 , 直到仓库中的产品被消费者取走为止 . 如果仓库中放有产品 , 则消 阅读全文
posted @ 2021-04-25 14:59
saxon宋
阅读(45)
评论(0)
推荐(0)
摘要:
Lock(锁) 从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Loc 阅读全文
posted @ 2021-04-25 14:58
saxon宋
阅读(604)
评论(0)
推荐(0)
摘要:
死锁 多个线程各自占有一些共享资源 , 并且互相等待其他线程占有的资源才能运行 , 而导致两个或者多个线程都在等待对方释放资源 , 都停止执行的情形 . 某一个同步块 同时拥有 “ 两个以上对象的锁 ” 时 , 就可能会发生 “ 死锁 ” 的问题 . 鱼与熊掌不能兼得 public class De 阅读全文
posted @ 2021-04-25 14:56
saxon宋
阅读(53)
评论(0)
推荐(0)
摘要:
CopyOnWriteArrayList 线程安全 CopyOnWriteArrayList 是JUC下的一个方法,在java.util.concurrent.CopyOnWriteArrayList这个包下面 //线程安全 public class TestJUC { public static 阅读全文
posted @ 2021-04-25 14:52
saxon宋
阅读(66)
评论(0)
推荐(0)
摘要:
同步方法 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要对这个方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法: synchronized 方法 和 synchronized 块 同步方法: public synchronized v 阅读全文
posted @ 2021-04-25 14:50
saxon宋
阅读(269)
评论(0)
推荐(0)
摘要:
三大不安全案例 买票问题 //买票 public class Demo01 { public static void main(String[] args) { BuyTickets buyTickets = new BuyTickets(); new Thread(buyTickets,"pers 阅读全文
posted @ 2021-04-25 14:47
saxon宋
阅读(65)
评论(0)
推荐(0)
摘要:
线程同步(重点) 并发和并行 并发是两个队列交替使用同一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人便秘了去厕所呆半天,后面的人也只能死等着他回来才能去接咖啡,这效率无疑是最低的。 并发是不是一个线程,并行是多个线程? 并发和并行都可以是很多个线程 阅读全文
posted @ 2021-04-25 14:42
saxon宋
阅读(47)
评论(0)
推荐(0)
摘要:
守护(daemon)线程 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如gc线程 如,后台记录操作日志,监控内存,垃圾回收等待.. 设置为守护线程核心就是将线程的setDaemon(true)设置为true public class TestDaemo 阅读全文
posted @ 2021-04-25 14:37
saxon宋
阅读(116)
评论(0)
推荐(0)
摘要:
线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行 线程的优先级用数字表示,范围从1~10. Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PR 阅读全文
posted @ 2021-04-25 14:33
saxon宋
阅读(131)
评论(0)
推荐(0)
摘要:
线程状态观测 NEW 线程尚未开始。 RUNNABLE 处于这种状态中的java虚拟机执行的线程。 BLOCKED 线程阻塞等待监控锁。 WAITING 处于这种状态的线程被无限期地等待另一个线程来执行特定的动作。 TIMED_WAITING 处于这种状态的线程正在等待另一个线程上执行一个动作指定的 阅读全文
posted @ 2021-04-25 14:31
saxon宋
阅读(48)
评论(0)
推荐(0)
摘要:
线程插队(join) Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 可以想象成插队 a b 两个线程,在a队伍跑的过程中,b线程来插队,那么a就发生了阻塞,停止执行,直到b线程执行完,a才能执行。 //线程插队join public class TestJoin impleme 阅读全文
posted @ 2021-04-25 14:28
saxon宋
阅读(217)
评论(0)
推荐(0)
摘要:
线程礼让 线程礼让(yield) 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,礼让不一定成功!由cpu决定 ublic class TestYield { public static void main(String[] args) { MyYiel 阅读全文
posted @ 2021-04-25 14:26
saxon宋
阅读(86)
评论(0)
推荐(0)
摘要:
线程休眠 线程的休眠 sleep (时间) 指定当前线程阻塞的毫秒数 sleep 存在异常 InterruptedException sleep 时间达到后线程进入就绪状态 sleep 可以模拟网络延时,倒计时等 每个对象都有一个锁,sleep 不会释放锁 public class TestSlee 阅读全文
posted @ 2021-04-25 14:24
saxon宋
阅读(83)
评论(0)
推荐(0)
摘要:
线程停止 线程状态 JDK中用Thread.State类定义了线程的几种状态 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态: 新建:当一个Thread类或其子类的对象被声明并创建时,新生的线 阅读全文
posted @ 2021-04-25 10:32
saxon宋
阅读(71)
评论(0)
推荐(0)
摘要:
Lamda表达式 Lamda表达式 λ 希腊字母表中排序第十一位的字母 ,英文名字为Lambda 避免匿名类定义太多 其实质属于函数式编程的概念 (params)-> expression[表达式] (params)->statement [语句] (params)-> { statement } 阅读全文
posted @ 2021-04-25 09:50
saxon宋
阅读(146)
评论(0)
推荐(0)
摘要:
静态代理 模拟婚庆公司,来实现静态代理 我们真实角色,婚庆公司代理角色 结婚事件为接口 /* 静态代理模式总结: 1.真实对象和代理对象都要实现同一个接口 2.代理对象要代理真实角色 好处: 1.代理对象可以做很多真实对象做不了的事情 2.真实对象专注于做自己的事情 */ public class 阅读全文
posted @ 2021-04-25 09:44
saxon宋
阅读(45)
评论(0)
推荐(0)
摘要:
- 实现Runnable接口 实现Runnable 定义 MyRunnable类 实现 Runnable接口 重写run()方法,编写线性执行体 创建线程对象,调用 start() 方法启动线程 推荐使用Runnable对象,因为Java单继承的局限性 //创建线程方式2: 实现runnable接口 阅读全文
posted @ 2021-04-25 09:42
saxon宋
阅读(866)
评论(0)
推荐(0)
摘要:
实现Callable接口 实现Callable接口,需要返回值类型 重写call方法,需要抛出异常 创建目标对象 创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1); 提交执行:Future result1 = ser.submi 阅读全文
posted @ 2021-04-25 09:29
saxon宋
阅读(126)
评论(0)
推荐(0)

浙公网安备 33010602011771号