摘要: 线程池 什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到 阅读全文
posted @ 2018-10-22 23:07 toov5 阅读(249) 评论(1) 推荐(1) 编辑
摘要: 完全利用了阻塞队列的特性,实现了消费者生产者的关系,非常好玩! 大家赶紧看看代码,然后动手默写一个吧~~ 看到运行结果 消费者获取不到什么的话 等待等待 再获取不到就退出了 阅读全文
posted @ 2018-10-22 22:43 toov5 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 1、我建议大家 先理解并发队列再去理解线程池原理 并发队列,有两个大家务必要会的,并且以这俩为代表的队列都是继承自Queue。 ConcurrentLinkedQueue(非阻塞) BlockingQueue(阻塞) (说白了就是 等待 与 非等待) 阻塞式队列与非阻塞式队列的区别: 在于 入队 和 阅读全文
posted @ 2018-10-22 19:43 toov5 阅读(993) 评论(0) 推荐(0) 编辑
摘要: volitile和synchronize volitile可以保证可见性,不能保证原子性,禁止重排序 synchronize:既然可以保证可见性又能 保证原子性 重排序: cpu对代码实现优化,不会对有依赖关系的做重排序(多线程情况下) 多线程情况下是没有影响的 数据依赖性 如果两个操作访问同一个变 阅读全文
posted @ 2018-10-22 18:13 toov5 阅读(878) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2018-10-22 17:48 toov5 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 什么是Volatile 可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。 在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加 阅读全文
posted @ 2018-10-22 15:48 toov5 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 多线程有三大特性 原子性、可见性、有序性 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必 阅读全文
posted @ 2018-10-22 15:18 toov5 阅读(158) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal提高一个线程的局部变量,访问某个线程拥有自己局部变量。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal的接口方法 Thre 阅读全文
posted @ 2018-10-22 14:54 toov5 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 同步中嵌套同步,导致锁无法释放 t1先获取oj锁,然后this锁,才能把程序执行完毕 t2现货区this锁,再获取oj锁,才能把程序执行完毕 结果: 阅读全文
posted @ 2018-10-22 03:35 toov5 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 什么是静态同步函数? 方法上加上static关键字,使用synchronized 关键字修饰 或者使用类.class文件。 静态的同步函数使用的锁是 该函数所属字节码文件对象 可以用 getClass方法获取,也可以用当前 类名.class 表示。 总结: synchronized 修饰方法使用锁是 阅读全文
posted @ 2018-10-22 01:56 toov5 阅读(447) 评论(0) 推荐(0) 编辑