随笔分类 -  JAVA 多线程

摘要:说线程池必须说队列,因为线程池跟队列有着莫大的关系 一、阻塞队列(7个):数组阻塞队列、链表阻塞队列、优先级排序队列,还有对应的无界阻塞队列,另外还有双向阻塞队列,排序规则分为先进先出FIFO 与先进后出LIFO两种。 对于阻塞队列,针对插入与移除有有4种操作方式。如下: 测试(有界队列): 1.抛 阅读全文
posted @ 2019-05-14 15:54 李鹏飞ONLINE 阅读(8180) 评论(0) 推荐(0) 编辑
摘要:Join 方法可以使当前线程等待子线程,如果子线程未结束,则会一致处在wait状态。 因为其内部是通过wait 方法实现的,当执行完毕后会调用notifyAll 释放锁。 CountDownLatch 允许一个或多个线程等待其他线程完成操作,相比join ,能做的事情更多。 输出: 由结果看出,实现 阅读全文
posted @ 2019-05-10 21:57 李鹏飞ONLINE 阅读(188) 评论(0) 推荐(0) 编辑
摘要:单例模式大家都知道,不用多说,就是只保持一个实例~ 比如(饥饿模式/饿汉模式): 延迟加载: 下面针对懒汉模式与多线程的实例。 如果是在多线程的情况下,就有可能出现错误,比如: 输出: 说明创建了2个对象实例。 那么就同步呗:synchronized 输出: 提高效率: 输出: 这样的话,就只是在创 阅读全文
posted @ 2019-05-08 19:15 李鹏飞ONLINE 阅读(143) 评论(0) 推荐(0) 编辑
摘要:Lock:lock对象功能类似synchronized ,但是更加方便,或者说有更多的功能。 实现类: 1.ReentrantLock 2.ReentrantReadWriteLock : 读写互斥,比1功能再多一点 一、ReentrantLock 首先回顾一下synchronized: 输出: 结 阅读全文
posted @ 2019-05-08 18:49 李鹏飞ONLINE 阅读(242) 评论(0) 推荐(0) 编辑
摘要:join: 说明:线程A等待线程B 的结果或者等待线程B执行结束 输出: 由结果看出,主线程等待子线程结束后再继续执行。 join与synchronized 的不同在于:虽然都会阻塞,但是join内部使用的是wait 进行等待,而synchronized 使用的时候对象监视器。 join(long) 阅读全文
posted @ 2019-05-08 17:39 李鹏飞ONLINE 阅读(235) 评论(0) 推荐(0) 编辑
摘要:一、wait、notify、notifAll 所有Object都有这三个方法。 wait :当前线程等待锁(放弃当前线程持有的锁) notify:随机通知等待此锁的线程准备获取锁 notifyALL:释放锁并通知所有等待此锁的线程 整个等待与通知的过程,类似餐馆上菜,服务员等待菜,厨师(线程)做好菜 阅读全文
posted @ 2019-05-05 22:33 李鹏飞ONLINE 阅读(572) 评论(0) 推荐(0) 编辑
摘要:锁对象的改变: 关于锁,如果多个线程争的是一个锁,那么就是同步的,如果不是一个锁就是异步的。 那么关键点就在于是不是同一个锁,如果在运行过程中锁改变了,那么变成异步的话就会出现问题,需注意。 volatile 关键字: 在多个线程中可见,不具备原子性。 线程中的实例属性在 -server 模式中,线 阅读全文
posted @ 2019-05-05 20:46 李鹏飞ONLINE 阅读(148) 评论(0) 推荐(0) 编辑
摘要:接着3说: 一、String常量池 先回顾 java 的基本数据类型: 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。 阅读全文
posted @ 2019-04-26 21:11 李鹏飞ONLINE 阅读(196) 评论(0) 推荐(0) 编辑
摘要:再讲线程安全: 一、脏读 脏读:在于读字,意在在读取实例变量时,实例变量有可能被另外一个线程更改了,导致获取到的数据出现异常。 在非线程安全的情况下,如果线程A与线程B 共同使用对象实例C中的方法method,如果实例C存在实例变量,同时在method中会操作这个实例变量a,则有可能出现脏读的情况。 阅读全文
posted @ 2019-04-25 19:01 李鹏飞ONLINE 阅读(322) 评论(0) 推荐(0) 编辑
摘要:一、首先 Thread 是实现了Runable 接口的类 理论上Thread 实例与直接实现runable接口的实例运行起来没有什么不同,但是由于JAVA 是单继承,所以如果想再一个类中实现2个不同的thread只有通过实现runable接口。 再来看Thread中start 和 run 的不同,s 阅读全文
posted @ 2019-04-25 16:20 李鹏飞ONLINE 阅读(187) 评论(0) 推荐(0) 编辑
摘要:入坑3年,对线程总是一知半解,最多停留在copy,决定还是仔细看看这方面的东西,一点点的记录让自己理解,对一些重要的概念进行记录和理解(包括参考作者的原话与个人理解) 参考链接:https://www.cnblogs.com/wxd0108/p/5479442.html 平行:多个cpu实例或者多台 阅读全文
posted @ 2019-04-24 21:07 李鹏飞ONLINE 阅读(310) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示