随笔分类 - 多线程
摘要:线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接使用 前提:AB线程在同一个线程池里面;A线程执行完毕了,B线程进来了,就直接去替换原来A线程的ru
阅读全文
摘要:CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; import java.util.concurrent.CountDownLatch; class MyT
阅读全文
摘要:1、Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2、将线程不安全集合变为线程安全集合 3、ConcurrentHashMap(分段存储,分段锁,只要多个修改操作发生在不同的段上,它们就可
阅读全文
摘要:如何停止线程 1、使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了) package com.cppdy; class MyThread15 extends Thread{ @Override public synchronized void run() {
阅读全文
摘要:Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线程执行完毕或者抛出异常的话,锁自动释放(相当于汽车中的自动挡) Condition用法 Condit
阅读全文
摘要:多线程通讯实例(必须要有多个线程、必须要管理同一个变量;线程A生产一个变量,线程B消费一个变量) 生产者线程A:如果有值还没读,就等待 消费者线程B:如果全部读完了,就等待
阅读全文
摘要:ThreadLocal关键字实现每个线程有自己的变量
阅读全文
摘要:使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) 当更改falg的值,volatile会更新其它线程falg的值
阅读全文
摘要:使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) 原子性:保证10个线程都对count加了1000次,最终结果为10000
阅读全文
摘要:死锁产生的原因(必须有两个线程、必须有多个锁、锁之间必须有引用的过程) T1一直等待T2释放this锁 T2又一直等待T1释放ob锁
阅读全文
摘要:在静态方法上面加synchonizd用的是字节码文件锁 一般情况下,不使用static锁:JVM编译的时候,static是存到方法区,方法区是垃圾回收机制不会回收的
阅读全文
摘要:在方法上面加synchonizd用的是this锁
阅读全文
摘要:synchonizd解决安全性问题 线程安全问题产生的条件:要有两个线程以上;必须要对同一变量进行操作;必须代码块使用同一把锁 原理:一个拿到锁,其它线程进行等待;释放过后,其它线程才能访问,就是锁的竞争问题,也是死锁产生的条件
阅读全文
摘要:什么是守护线程 守护线程是为用户线程服务的这么一个线程,主线程结束,守护线程也结束
阅读全文
摘要:多线程应用实例(批量发送短信) 1、创建实体类 package com.cppdy; public class UserEntity { private int id; private String name; public int getId() { return id; } public voi
阅读全文
摘要:常用线程api方法 多线程运行状态 1、新建状态 用new创建一个线程 2、就绪状态 当调用线程的start()方法 3、运行状态 当线程获得cpu,开始执行run方法 4、阻塞状态 线程通过调用sleep方法进入睡眠状态 线程试图得到一个锁,而该锁正被其它线程持有 线程在等待某个触发条件 5、死亡
阅读全文