随笔分类 -  多线程

摘要:Java NIO是new IO的简称,是一种可以替代Java IO的一套新的IO机制。它提供了一套不同于Java标准IO的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高线程的使用效率。Java NIO设计的基础内容有通道(Channel)、缓冲区(Buffer)、Sel 阅读全文
posted @ 2019-08-12 00:23 扁豆一号 阅读(939) 评论(0) 推荐(0) 编辑
摘要:Future模式是多线程开发中常用常见的一种设计模式,它的核心思想是异步调用。在调用一个函数方法时候,如果函数执行很慢,我们就要进行等待,但这时我们可能不着急要结果,因此我们可以让被调者立即返回,让它在后台慢慢处理这个请求,对于调用者来说可以先处理一些其他事物,在真正需要数据的场合再去尝试获得需要的 阅读全文
posted @ 2019-08-11 16:10 扁豆一号 阅读(1490) 评论(0) 推荐(0) 编辑
摘要:生产者-消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案。这个模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间通过共享内存缓存区进行通信,这样就避免了生产者和消费者直接通 阅读全文
posted @ 2019-08-10 17:57 扁豆一号 阅读(1303) 评论(0) 推荐(0) 编辑
摘要:对于并发控制而言,锁是一种悲观策略,它总是假设每一次的临界区操作会产生冲突。如果有多个线程同时需要访问临界区资源,则宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。而无锁是一种乐观策略,它会假设对资源的访问是没有冲突的,既然没有冲突就不会让线程等待,所有线程可以在不停顿的情况下持续执行。那遇到冲 阅读全文
posted @ 2019-08-09 23:36 扁豆一号 阅读(741) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal是一个线程的局部变量,也就是只有当前线程可以访问,是线程安全的。为每一个线程分配不同的对象,需要在应用层面保证ThreadLocal只起到简单的容器作用。 ThreadLocal类很简单,只有4个方法,它们是如下方法: void set(Object value)设置当前线程的 阅读全文
posted @ 2019-08-04 19:32 扁豆一号 阅读(171) 评论(0) 推荐(0) 编辑
摘要:JDK内部的“锁”优化策略 1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申请的操作,从而提高了程序的性能。对几乎没有锁竞争的场合,偏向锁有很好的优化效果,对于锁竞争激烈的场合 阅读全文
posted @ 2019-07-28 18:07 扁豆一号 阅读(273) 评论(0) 推荐(0) 编辑
摘要:锁是最常见的同步方法之一,在高并发环境下,激烈的的锁竞争导致程序的性能下降,因此我们有必要讨论一些有关锁的性能问题,以及一些注意事项,比如避免死锁等。为了降低锁的竞争导致程序性能下降的话,可以用以下建议提高一下性能。 1. 减少锁持有时间 对于使用锁进行并发控制的应用程序而言,在锁竞争过程中,单个线 阅读全文
posted @ 2019-07-28 01:21 扁豆一号 阅读(1429) 评论(0) 推荐(0) 编辑
摘要:JDK提供了一些高效的并发容器,下面介绍几个 ConcurrentHashMap:这是个高效的并发HashMap,可以理解为一个线程安全的HashMap。 CopyOnWriteArrayList:这是一个List,从名字看就知道它和ArrayList是一族的,在读多写少的场合,这个List的性能非 阅读全文
posted @ 2019-07-26 23:32 扁豆一号 阅读(242) 评论(0) 推荐(0) 编辑
摘要:关键字Synchronize是最简单的控制方法,决定了一个线程是否可以访问临界区资源。同时,Object.wait()方法和Object.notify()方法起到了线程等待和通知的作用。下面介绍重入锁: 1. 重入锁 重入锁使用java.util.concurrent.locks.Reentrant 阅读全文
posted @ 2019-07-23 20:28 扁豆一号 阅读(409) 评论(0) 推荐(0) 编辑
摘要:线程的创建和销毁是消耗时间和资源的,创建大量的线程会抢占宝贵的内存资源,大量的线程回收也给GC带来很大的压力。为了避免这种情况的出现,可以让创建的线程复用,那么线程池就应用而生了。需要线程时,从线程池中拿一个线程,不需要时再归还给线程池,从而达到了复用线程的效果。 JDK提供了一套Executor框 阅读全文
posted @ 2019-07-19 14:17 扁豆一号 阅读(200) 评论(0) 推荐(0) 编辑
摘要:1.start()和run() start()方法是是开启线程的方法,这个方法执行后,一个线程才真正的进入RUNNABLE状态。run()方法是线程中具体执行的业务活动,一般都要重写run()方法。 2.stop() stop()方法在结束线程时,会直接终止线程,并立即释放这个线程所持有的锁,而锁恰 阅读全文
posted @ 2019-07-17 23:58 扁豆一号 阅读(1085) 评论(0) 推荐(0) 编辑
摘要:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是线程的容器。 程序是指令、数据及其组织形式的描述,进程是程序的实体。 在Windows系统中,任务管理器中可以看到各个进程。 线程是轻量级进程,是程序执行的最小单位,使用多线程而不是多进程 阅读全文
posted @ 2019-07-14 23:25 扁豆一号 阅读(186) 评论(0) 推荐(0) 编辑
摘要:这几天看书的时候看到一个算法,叫粒子群算法,这个算法挺有意思的,下面说说我个人的理解: 粒子群算法(PSO)是一种进化算法,是一种求得近似最优解的算法,这种算法的时间复杂度可能会达到O(n!),得到的结果不一定是最优解,往往已经很接近最优解了。最早是Kenny 和 Eberhart于1995年提出的 阅读全文
posted @ 2019-07-12 00:16 扁豆一号 阅读(3248) 评论(1) 推荐(0) 编辑

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