随笔分类 - 多线程
多线程编程
摘要:一、简介 JDK5以前就有了ThreadLocal,又叫线程本地变量,提供了get与set等方法,这些方法为每一个使用该变量的线程都存有一份独立的副本,因此get总是返回由当前执行线程在调用set方法时设置的最新值。 二、使用 使用方法比较简单,如下。 ThreadLocal<M> threadLo
阅读全文
摘要:闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态。 作用:相当于一扇门,在到达结束状态之前,这扇门一直是关闭的,并且没有任务线程能够通过,当到达结束状态时,这扇门会打开并允许所有的线程通过,并且将不会再改变状态,因此这扇门将永远保持打开状态。闭锁可以用来确保某些活动直到其他活动都完成后才继
阅读全文
摘要:多个线程操作同一个方法或变量时常常出现错误,要保证每个线程都正常运行就要通过加锁,每次只有一个能够拿到锁通过。如下: 如果没有synchronized 的话,运行结果如图。 不再是依次打印出名字,该关键字还可以加在代码块里。一般为了性能,我们要减少同步执行的代码数量(可以用同步代码块就不用同步方法)
阅读全文
摘要:执行结果: 之间学习并发编程并没有注意到Timer这个类,可能是被摒弃了吧。毕竟现在项目中的定时任务,可以使用组件quartz或者spring框架自带的Task。 我怀疑后面两种也是基于该类实现吧。
阅读全文
摘要:Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。 当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行。 执行结果: 可以看到线程
阅读全文