随笔分类 - 多线程
摘要:java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。 一、简介 ReentrantLock常常对比着synchronized来分析
阅读全文
摘要:CopyOnWriteArrayList CopyOnWriteArrayList适合于多线程场景下使用,其采用读写分离的思想,读操作不上锁,写操作上锁,且写操作效率较低。 CopyOnWriteArrayList基于fail-safe机制,每次修改都会在原先基础上复制一份,修改完毕后在进行替换。
阅读全文
摘要:由于同一进程的多个线程共享同一块存储空间 , 在带来方便的同时,也带来了访问 冲突问题 , 为了保证数据在方法中被访问时的正确性 , 在访问时加入 锁机制synchronized , 当一个线程获得对象的排它锁 , 独占资源 , 其他线程必须等待 , 使用后释放锁即可 . 存在以下问题 : 一个线程
阅读全文
摘要:守护线程 Daemon 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等待.. 代码示例: /** * @Description 测试守护线程,上帝保佑着你 * @Author hzx * @Date 2022-0
阅读全文
摘要:线程优先级 Priority Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度 器按照优先级决定应该调度哪个线程来执行。 线程的优先级用数字表示,范围从1~10。 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thr
阅读全文
摘要:观测线程状态 getState() Thread.State(查看JDK帮助文档) 线程状态。线程可以处于以下状态之一: [NEW] 尚未启动的线程处于此状态。 [RUNNABLE] 在Java虚拟机中执行的线程处于此状态。 [BLOCKED] 被阻塞等待监视器锁定的线程处于此状态。 [WAITIN
阅读全文
摘要:线程强制执行 join() Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 ; 可以想象成插队。 代码示例: /** * @Description 测试join方法 * @Author hzx * @Date 2022-03-26 */ public class TestJoin
阅读全文
摘要:线程礼让 Thread.yield() 礼让线程,让当前正在执行的线程暂停,但不阻塞 ; 将线程从运行状态转为就绪状态 ; 让cpu重新调度,礼让不一定成功!看CPU心情。 代码示例: /** * @Description 测试线程礼让 * @Author hzx * @Date 2022-03-2
阅读全文
摘要:线程休眠 Thread.sleep() sleep (时间) 指定当前线程阻塞的毫秒数; sleep存在异常InterruptedException; sleep时间达到后线程进入就绪状态; sleep可以模拟网络延时,倒计时等; 每一个对象都有一个锁,sleep不会释放锁。 代码示例: Threa
阅读全文
摘要:Thread静态代理模式理解 代码示例: /** * @Description 静态代理模式 * @Author hzx * @Date 2022-03-26 */ public class StaticProxy { public static void main(String[] args) {
阅读全文
摘要:线程创建方式三:实现callable接口 代码示例: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; import java.u
阅读全文
摘要:【多线程】实现多线程同步下载图片 代码示例: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; /** * @Descriptio
阅读全文
摘要:案例:龟兔赛跑-Race 首先来个赛道距离,然后要离终点越来越近 判断比赛是否结束 打印出胜利者 龟兔晒跑开始 故事中是乌龟赢的,兔子需要睡觉,所有我们要模拟兔子睡觉 最后,乌龟赢得比赛 代码示例: /** * @Description 模拟龟兔赛跑 * @Author hzx * @Date 20
阅读全文
摘要:多个线程同时操作一个对象,买火车票的例子 代码示例: /** * @Description 多个线程同时操作一个对象,买火车票的例子 * @Author hzx * @Date 2022-03-26 */ public class ThreadTest03 implements Runnable {
阅读全文
摘要:创建线程方式二:实现Runnable接口 代码示例: /** * @Description 实现Runnable接口,重写run方法,执行线程需要丢入Runnable接口实现类,调用start方法 * @Author hzx * @Date 2022-03-26 */ public class Th
阅读全文
摘要:创建线程方式一:继承Thread类 代码示例: /** * @Description 继承Thread类,重写run方法,调用start开启线程 * @Author hzx * @Date 2022-03-25 */ public class ThreadTest01 extends Thread
阅读全文