文章分类 - Java 多线程笔记
摘要:内容来自B站【狂神说Java】多线程详解 package com.example.demo.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import jav
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 使用线程池 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 好处: 提高响应速度(减少了
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 package com.example.demo.thread.sync.pc2; public class TestPc2 { public static void main(String[] args) { TV tv = new TV(); new P
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 package com.example.demo.thread.sync.pc; import java.util.ArrayList; import java.util.List; public class TestPC { public static v
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 线程通信 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。 如果仓库中放有产品,则消费者
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 Lock(锁) 从JDK5.0开始,Java提供了更强大的线程同步机制——通过显示定义同步锁对象来实现同步,同步锁使用Lock对象充当。 java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 死锁 多个线程各自占有一些公共资源,并且互相等待其他线程释放占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。 避免方法 产生死锁的四个必要条件 互斥条件
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 内容 java.util.concurrent是java并发包,是关于并发编程的,Callable也是在这个包下。 这个包下的CopyOnWriteArrayList就是线程安全的。 CopyOnWriteArrayList源码中有volatile修饰,pr
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 同步方法 概念 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种写法:synchronized方法和synchronized块。同步方法:public
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 一、不安全的买票 代码演示 package org.example.thread; /** * 不安全的买票 * @author 86153 * */ public class UnsafeBuyTicket { public static void mai
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 线程同步 多个线程操作同一个资源。 并发 同一个对象被多个线程同时操作。 现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如 食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队,一个个来 上万人同时抢100张票 两个人同时从一张银行卡里取
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 守护(daemon)线程 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等待.. 代码演示 package com.example.demo.thread; public
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 线程的优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。 线程的优先级用数字表示,范围从1~10。 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORI
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 线程状态观测 Thread.State 线程可以处于一下状态之一: - New:尚未启动的线程处于此状态。 - RUNNABLE:在Java虚拟机中执行的线程处于此状态。 - BLOCKED:被阻塞等待监视器锁定的线程处于此状态。 - WAITING:正在等
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 概念 Join Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 可以想象成插队 代码演示 package com.example.demo.thread; public class TestJoin implements Runnable
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 一、线程五大状态 1. 定义: (1). 创建状态:启动线程后进入就绪状态。 (2). 就绪状态:获得CPU资源后进入运行状态。 (3). 阻塞状态:阻塞解除后进入就绪状态。 (4). 运行状态 - 等待用户输入或线程休眠后进入阻塞状态 - 释放CPU资源后
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 一、线程休眠 sleep(时间)指定当前线程阻塞的毫秒数; sleep存在异常InterruptedException; sleep时间达到后线程进入就绪状态; sleep可以模拟网络延时,倒计时等; 每一个对象都有一个锁,sleep不会释放锁。 二、代码演
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 一、概念 线程礼让,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,礼让不一定成功!看CPU心情 二、代码演示 package com.example.demo.thread; public class TestYield
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 一、概述 λ希腊字母表中排序第十一位的字母,英语名称为Lambda 避免匿名内部类定义过多 其实质属于函数式编程的概念 二、为什么要使用Lambda表达式 避免匿名内部类定义过多 可以让你的代码看起来很简洁 去掉了一堆没有意义的代码,只留下核心的逻辑 也许你
阅读全文
摘要:内容来自B站【狂神说Java】多线程详解 案例:龟兔赛跑-Race 一、实现思路 首先来个赛道距离,然后要离终点越来越近 判断比赛是否结束 打印出胜利者 龟兔赛跑开始 故事中是乌龟赢得,兔子需要睡觉,所以我们来模拟兔子睡觉 终于,乌龟赢得比赛 二、代码 package com.example.dem
阅读全文