nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
JUCAQS   AbstractQueuedSynchronizer 是阻塞式的锁和相关的同步器工具的框架
ReentrantLock如何重入   用一个变量记录重入了多少次
NonfairSynclock   cas ,成功就吧ouner改为自己,否则acquire,把自己放进链表中
acquire   tryacquire,成功就结束,失败的话还会尝试几次,然后才park,并为前驱标记,让前驱记得唤醒自己,如果曾经被打断的话,会被忽略,再次进入aqs队列,得到锁以后会打断自己来再次重新打断
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
异步模式-工作线程线程不足导致饥饿 有两个线程A,B,任务有两种,上菜和做菜,显然上菜要等待做菜,如果AB都在执行上菜,就没有更多的线程做菜了,这就导致了AB在死等,注意这不是死锁, 所以不同的任务类型应该用不同的线程池
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
JDK的线程池 线程池状态,RUNNING,SHUTDOWN(不会再接受新任务了),STOP(立刻停止),TIDYING(任务执行完毕,即将TERMINATED),TERMINATED
构造函数1public ThreadPollExecutor(int corePoolsize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
核心线程数量
最大线程数量
就急线程生存时间
时间单位
阻塞队列
线程工厂: 给线程起个名字
拒绝策略
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
自定义线程池 把main看作任务的生产者,把线程看作任务的消费者,这时候模型就建立出来了 于是我们需要一个缓冲区,采取消费正生产者模式,然后让消费者不断消费,并在适当的时候创建新的消费者,如果所有任务都做完了,就取消消费者
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
不可变就是线程安全 如String
拷贝构造函数 之间赋值
char[]构造 拷贝一份(保护性拷贝)
子串 如果下标起点和母串起点相同,则之间引用过去,否则保护性拷贝(不明白为啥不共用)
享元模式 最小化内存的使用,共用内存
包装类 valueOf, 比如Long如果在-128到127之间,就使用一个cache数组,又如String串池,BigDecimal和BigInteger的某些数组
保护 千万要注意这些类的函数组合起来操作就不一定安全了,需要用原子引用类来保护
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
CAS compareAndSet(prev,next);无锁,无阻塞
为什么效率高 失败的话会重新尝试,但是锁会进行上下文切换,代价大
原子整形AtomicInteger123incrementAndGet();getAndAdd(5);updateAndGet(value -> value*10);
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
JMM Java Memory Model
原子性: 保证指令不会收到线程上下文切换的影响
可见性: 保证指令不会受到cpu缓存的影响
有序性: 保证指令不会受到cpu指令并行优化的影响
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
synchronized 锁住对象,放在静态方法前为锁类,放在普通方法前为锁类的对像。使用管程实现
线程安全类 String, Integer, StringBuffer,Random,Vector,Hashtable,juc;
加锁 把对象头的hash、Age和对象的指针放进自己的栈中,让对象头的hash、Age,位置指向自己的栈, 这时候来了另一个线程也想拿到锁,但是他肯定会失败,失败以后他就申请重量级锁,让对象头再次改变为指向管程, 当原来当线程想要释放锁的时候,依然使用cas,但是肯定失败,他发现现在的锁已经变成了重量级锁了。
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
栈 每个线程都有自己的栈,
线程上下文切换
CPU时间片用完
gc
有更高优先级的线程要运行
线程自己sleep,yield,wait,join,park,synchronized,lock
阅读全文
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
使用Tread创建线程123456789101112131415161718192021package com.wsx.test;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ThreadTest { @Test public void test1() { final Logger logger = LoggerFactory.getLogger(ThreadTest.class); Thread thread = new Thread() { @Override public void run() { logger.debug("running"); } }; thread.setName("t1"); thread.start(); logger.debug("running"); }}
阅读全文