多线程学习
文章平均质量分 50
mediocre117
这个作者很懒,什么都没留下…
展开
-
thread31 - 售票3
package com.neutron.t21; import java.util.ArrayList; import java.util.List; import java.util.Vector; import java.util.concurrent.TimeUnit; /** * 有N张火车票,每张票都有1个编号,同时有10个窗口对外售票 * * 分析下面程序可能存在哪些问题:重原创 2017-06-15 06:49:02 · 261 阅读 · 0 评论 -
thread16 - 多线程练习题1
package com.neutron.t16; import java.util.ArrayList; import java.util.List; /** * 淘宝笔试题: * 实现个容器,提供两个方法,add和size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素个数,当个数到5个的时候,线程2给出提示并且结束 * * 分析下面程序能否实现要求 */ pu原创 2017-06-10 13:15:52 · 442 阅读 · 0 评论 -
thread15 - 不要使用字符串常量做锁
package com.neutron.t15; import java.util.concurrent.TimeUnit; /** * 不要以字符串常量作为锁定对象 * 在下面的例子中,m1和m2其实锁定的同一个对象。这种情况会发生比较诡异的情况。比如你在某个类库中 * 该类库中代码锁定字符串"hello",如果阅读不到源码,你在你的代码中也锁定"hello",这时候就可能发生原创 2017-06-10 12:10:55 · 1259 阅读 · 0 评论 -
thread14 - 锁的引用发生改变锁发生改变
package com.neutron.t14; import java.util.concurrent.TimeUnit; /** * 锁定某个对象o,如果o的属性发生改变,不会影响锁的使用。 * 如果o变成另外1个对象,则锁定的对象会发生改变。 * 所以应当避免将锁定对象的引用变成另外的对象 */ public class T14 { Object o = new O原创 2017-06-10 12:02:47 · 315 阅读 · 0 评论 -
thread13 - synchronized优化
package com.neutron.t13; import java.util.concurrent.TimeUnit; /** * synchronized语句优化: * 同步代码块中的语句越少越好 */ public class T13 { int count = 0; public synchronized void run1() { //原创 2017-06-10 11:26:56 · 258 阅读 · 0 评论 -
thread12 - AtomXXX
package com.neutron.t12; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * 讲解内容:AtomXXX * 因为++,--等操作不具备原子性,所以可以使用如下替代方式。 * AtomXXX类本身的原创 2017-06-10 11:11:47 · 997 阅读 · 2 评论 -
thread11 - volatile
package com.neutron.t11; import java.util.ArrayList; import java.util.List; /** * 讲解内容:volatile关键字 * volatile关键字,会使1个变量在多个线程中可见。 * 使用volatile将会强制所有的线程都去堆内存中读取running的值 * volatile并不能保证多个线程共原创 2017-06-10 10:52:48 · 290 阅读 · 0 评论 -
thread10 - volatile
package com.neutron.t10; import java.util.concurrent.TimeUnit; /** * 讲解内容:volatile关键字 * volatile关键字,会使1个变量在多个线程中可见。 * a,b线程都有1个变量,java默认a线程中保留一份copy,如果b线程修改了这个变量,则a线程未必知道。 * * 下面代码中,runni原创 2017-06-10 10:25:50 · 299 阅读 · 0 评论 -
thread09 - 抛出异常释放锁
package com.neutron.t09; import java.util.concurrent.TimeUnit; /** * 问题:程序在执行过程中,如果发生异常,那么会不会释放锁? */ public class T09 { int count = 0; public synchronized void set2() { System.out原创 2017-06-10 09:40:33 · 294 阅读 · 0 评论 -
thread08 - 子类中调用父类的同步方法
package com.neutron.t08; import java.util.concurrent.TimeUnit; /** * 问题:子类的同步方法是否可以调用父类的同步方法 */ public class T08 { protected synchronized void hello() { System.out.println("parent hel原创 2017-06-10 07:55:56 · 1125 阅读 · 1 评论 -
thread07 - 同步方法中调用同步方法
package com.neutron.t07; import java.util.concurrent.TimeUnit; /** * 问题:一个线程是否是否可以调用另一个同步方法呢? */ public class T07 { public static synchronized void set2() { get2(); System.out原创 2017-06-10 07:43:38 · 521 阅读 · 0 评论 -
thread06 - 读写加锁
package com.neutron.t06; import java.util.concurrent.TimeUnit; /** * 对业务写方法加锁,对业务对方法不加锁,容易产生脏读现象 */ public class T06 { String name; double balance; public synchronized void set(String原创 2017-06-10 06:21:28 · 291 阅读 · 0 评论 -
thread05 - 同步方法和非同步方法执行
package com.neutron.t05; /** * 问题:同步方法和非同步方式是否可以同时调用? * 答案:同步方法和非同步方法是可以同时使用的。 */ public class T05 { public synchronized void run1() { System.out.println(Thread.currentThread().getNam原创 2017-06-10 05:48:09 · 442 阅读 · 0 评论 -
thread17 - 多线程练习题2
package com.neutron.t16; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * 淘宝笔试题: * 实现个容器,提供两个方法,add和size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素个数,当个数到5个的时候原创 2017-06-10 13:24:43 · 389 阅读 · 0 评论 -
thread18 - 多线程练习题3
package com.neutron.t16; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * 淘宝笔试题: * 实现个容器,提供两个方法,add和size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素个数,当个数到5个的时候原创 2017-06-10 13:55:31 · 477 阅读 · 0 评论 -
thread30 - 卖票2
package com.neutron.t21; import java.util.Vector; import java.util.concurrent.TimeUnit; /** * 有N张火车票,每张票都有1个编号,同时有10个窗口对外售票 * * 分析下面程序可能存在哪些问题:重复售票,还是超量售票? */ public class Ticket2 { /* 使用同步容原创 2017-06-15 06:44:24 · 225 阅读 · 0 评论 -
thread29 - 卖票1
package com.neutron.t21; import java.util.ArrayList; import java.util.List; /** * 有N张火车票,每张票都有1个编号,同时有10个窗口对外售票 * * 分析下面程序可能存在哪些问题:重复售票,还是超量售票? */ public class Ticket1 { static List tickets原创 2017-06-15 06:35:25 · 248 阅读 · 0 评论 -
thread27 - 线程安全的单例模式
package com.neutron.t20; /** * 线程安全的单例模式 * 既不用加锁,又能实现懒加载 */ public class Singleton { private Singleton() { } private static class Inner { private static Singleton s = new Si原创 2017-06-14 22:21:08 · 354 阅读 · 0 评论 -
thread27 - ThreadLocal2
package com.neutron.t19; import java.util.concurrent.TimeUnit; /** * ThreadLocal线程局部变量 * * ThreadLocal是使用空间换时间,synchronized是使用时间换空间 * 比如hibernate中session就存在ThreadLocal中,避免synchronized的使用 */ pub原创 2017-06-14 21:26:35 · 296 阅读 · 0 评论 -
thread26 - ThreadLocal1
package com.neutron.t19; import java.util.concurrent.TimeUnit; /** * ThreadLocal线程局部变量 */ public class T191 { /* * 为什么必须加上volatile? * 虽然不加上volatile,得出的结果和目标结果一样,但是存在安全隐患,涉及到jvm原理原创 2017-06-14 21:08:44 · 369 阅读 · 0 评论 -
thread25 - Lock和Condition
package com.neutron.t18; import java.util.LinkedList; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concu原创 2017-06-14 20:57:14 · 350 阅读 · 0 评论 -
thread24 - wait和notify和notifyAll
package com.neutron.t18; import java.util.LinkedList; import java.util.concurrent.TimeUnit; /** * 写一个固定容量的同步容器,拥有put和get方法,以及getCount方法。 * 能够支撑2个生产者线程,以及10个消费者线程的阻塞调用 * * 所谓同步容器,即如果容量满了,那么put阻塞;原创 2017-06-14 20:56:04 · 293 阅读 · 0 评论 -
thread23 - ReentrantLock4
package com.neutron.t17; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * ReentrantLock用于替代synchronized * 案例中由于m1锁定this,只有m1执行完毕后,m2才能执行 * 复习synchron原创 2017-06-13 07:05:16 · 291 阅读 · 0 评论 -
thread22 - ReentrantLock3
package com.neutron.t17; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * ReentrantLock用于替代synchronized * 案例中由于m原创 2017-06-12 06:46:32 · 281 阅读 · 0 评论 -
thread21 - ReentrantLock2 - tryLock
package com.neutron.t17; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * ReentrantLock用于替代synchronized * 案例中由于m原创 2017-06-10 16:48:44 · 292 阅读 · 0 评论 -
thread20 - ReentrantLock1
package com.neutron.t17; import java.util.concurrent.TimeUnit; /** * ReentrantLock用于替代synchronized * 案例中由于m1锁定this,只有m1执行完毕后,m2才能执行 * 复习synchronized最原始的语义 */ public class T171 { synchronize原创 2017-06-10 16:25:44 · 289 阅读 · 0 评论 -
thread19 - 多线程练习题4
package com.neutron.t16; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * 淘宝笔试题: * 实现个容器,提供两个方法,add和size原创 2017-06-10 14:11:18 · 435 阅读 · 0 评论 -
thread04 - synchronized
package com.neutron.t04; /** * 分析程序的输出 */ public class T04 implements Runnable { private int count = 10; // public /*synchronized*/ void run() { // count--; // System.out.pri原创 2017-06-09 06:58:56 · 242 阅读 · 0 评论 -
thread03 - synchronized
package com.neutron.t03; /** * 解说内容: * synchronized关键字使用在静态方法中 * 使用类.class作为锁 */ public class T03 { private static int count = 10; public static void m() { // 任何线程要执行下面的原创 2017-06-07 06:52:33 · 224 阅读 · 0 评论 -
thread02 - synchronized
package com.neutron.t02; /** * 解说内容: * synchronized关键字对某个对象进行加锁 * 使用自身对象this作为锁 */ public class T02 { private int count = 10; public void m() { // 任何线程要执行下面的代码,必须先拿到this原创 2017-06-06 07:00:08 · 222 阅读 · 0 评论 -
thread43 - 同步容器
对于map(set)的使用 如果不要求线程安全 HashMap TreeMap LinkedHashMap 并发量小 Hashtable Collections.synchronizedXXX 并发量大 ConcurrentHashMap // 高并发不涉及顺序 ConcurrentSkipListMap // 高并发考虑顺序原创 2017-06-16 16:44:30 · 283 阅读 · 0 评论 -
thread42 - SynchronizedQueue
package com.neutron.t22; import java.util.concurrent.BlockingQueue; import java.util.concurrent.SynchronousQueue; /** * SynchronizedQueue * 是特殊的LinkedTransferQueue,内部调用的是LinkedTransferQueue *原创 2017-06-16 16:17:57 · 2071 阅读 · 1 评论 -
thread41 - LinkedTransferQueue
package com.neutron.t22; import java.util.concurrent.LinkedTransferQueue; /** * LinkedTransferQueue * 使用场景消费者线程先启动,生产者去生产首先找有没有消费者,如果有消费者就不扔到队列,直接给消费者 * * 比如玩棋牌类游戏,a发牌后需要通知bcd,那么消息可以发送到队列中,然后原创 2017-06-16 16:07:55 · 340 阅读 · 0 评论 -
thread40 - DelayQueue
package com.neutron.t22; import java.util.concurrent.BlockingQueue; import java.util.concurrent.DelayQueue; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; /** * Queue原创 2017-06-16 14:08:25 · 281 阅读 · 0 评论 -
thread39 - ArrayBlockingQueue
package com.neutron.t22; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; /** * Queue * 1.并发加锁 ConcurrentLinkQ原创 2017-06-16 13:40:01 · 295 阅读 · 0 评论 -
thread38 - LInkBlockingQueue
package com.neutron.t22; import java.util.Random; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; /** * Queue * 1.并发加锁 ConcurrentLinkQueue * 2.阻塞原创 2017-06-16 13:24:47 · 618 阅读 · 0 评论 -
thread37 - queue
package com.neutron.t22; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentLinkedQueue; /** * 单向和双向队列 */ public class T224Queue {原创 2017-06-16 12:50:47 · 281 阅读 · 0 评论 -
thread36 - synchronizedXXX
package com.neutron.t22; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Collections.synchronizedXXX * 就是将list、map等常见的数据结构编程线程安全的 */ public class T223Synchr原创 2017-06-16 12:40:52 · 504 阅读 · 0 评论 -
thread37 - CopyOnWrite
package com.neutron.t22; import java.util.*; import java.util.concurrent.*; /** * 写时复制容器 copy on write * 多线程环境下, 写时效率低,读时效率高 * 适合写少读多的情况 */ public class T222CopyOnWrite { /** * 测试什么原创 2017-06-16 12:30:00 · 282 阅读 · 0 评论 -
thread36 - ConcurrentHashMap
package com.neutron.t22; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListSet; impor原创 2017-06-16 11:58:55 · 267 阅读 · 0 评论