
多线程学习
文章平均质量分 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 · 282 阅读 · 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 · 457 阅读 · 0 评论 -
thread15 - 不要使用字符串常量做锁
package com.neutron.t15;import java.util.concurrent.TimeUnit;/** * 不要以字符串常量作为锁定对象 * 在下面的例子中,m1和m2其实锁定的同一个对象。这种情况会发生比较诡异的情况。比如你在某个类库中 * 该类库中代码锁定字符串"hello",如果阅读不到源码,你在你的代码中也锁定"hello",这时候就可能发生原创 2017-06-10 12:10:55 · 1294 阅读 · 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 · 331 阅读 · 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 · 283 阅读 · 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 · 1020 阅读 · 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 · 309 阅读 · 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 · 318 阅读 · 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 · 309 阅读 · 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 · 1152 阅读 · 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 · 539 阅读 · 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 · 301 阅读 · 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 · 461 阅读 · 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 · 402 阅读 · 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 · 492 阅读 · 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 · 236 阅读 · 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 · 263 阅读 · 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 · 366 阅读 · 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 · 309 阅读 · 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 · 387 阅读 · 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 · 369 阅读 · 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 · 310 阅读 · 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 · 306 阅读 · 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 · 293 阅读 · 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 · 306 阅读 · 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 · 304 阅读 · 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 · 466 阅读 · 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 · 259 阅读 · 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 · 238 阅读 · 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 · 234 阅读 · 0 评论 -
thread43 - 同步容器
对于map(set)的使用如果不要求线程安全 HashMap TreeMap LinkedHashMap并发量小 Hashtable Collections.synchronizedXXX并发量大 ConcurrentHashMap // 高并发不涉及顺序 ConcurrentSkipListMap // 高并发考虑顺序原创 2017-06-16 16:44:30 · 294 阅读 · 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 · 2104 阅读 · 1 评论 -
thread41 - LinkedTransferQueue
package com.neutron.t22;import java.util.concurrent.LinkedTransferQueue;/** * LinkedTransferQueue * 使用场景消费者线程先启动,生产者去生产首先找有没有消费者,如果有消费者就不扔到队列,直接给消费者 * * 比如玩棋牌类游戏,a发牌后需要通知bcd,那么消息可以发送到队列中,然后原创 2017-06-16 16:07:55 · 372 阅读 · 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 · 293 阅读 · 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 · 311 阅读 · 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 · 648 阅读 · 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 · 297 阅读 · 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 · 524 阅读 · 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 · 294 阅读 · 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 · 281 阅读 · 0 评论