摘要:
ApplicationContext @Configuration @Bean @ComponentScan @Scope @Lazy @Conditional @Component @Import 未完待续 <用法,流程> 阅读全文
摘要:
最重要的原则 找出可能变化的部分,独立出来,不要和不需要变化的代码混在一起面向接口编程,不要针对实现编程多用组合,少用继承松耦合对象之间的交互对扩展开放,对修改关闭依赖抽象,不依赖具体类最少知识原则,一个类对于其他类,知道的越少越好别调用我,我会调用你一个类只有一个引起变化的原因 警惕 为实际需要而 阅读全文
摘要:
AQS(AbstractQueuedSynchronizer): 获取锁: 独占式获取 accquire acquireInterruptibly tryAcquireNanos 共享式获取 acquireShared acquireSharedInterruptibly tryAcquireSha 阅读全文
摘要:
CAS: Compare and swap 比较和交换 在指令的级别,保证该操作的原子性。 原理 如果这个内存地址的值是我所期望的值,那么就把它设成新值。 比如,如果内存地址为100的位置的值是1,我想把值改为2,那么CAS赋值操作就是这样的:如果内存地址为100的位置值是1,那么就把值设为2.所以 阅读全文
摘要:
FutureTask 单线程执行框架。 获得线程执行的返回值。 Callable包装成FutureTask,传入Thread对象中(继承了Runnable),start启动线程,然后通过Future接口的get()拿到返回值。 Callable<Object> callable = new Call 阅读全文
摘要:
CountDownLatch 只能用一次。 CountDownLatch countDownLatch = new CountDownLatch(5); 当一组线程调用countDownLatch的await方法时,进入等待。直到其他线程调用完5次countDown方法。 CyclicBarrier 阅读全文
摘要:
Java中启动一个线程的方式只有两种: 继承Thread类,实例化,调用start()通过Runnable new 出Thread对象,调用start() 也就是说,在Java中除了Thread类中的start方法,没有第二种方案可以启动一个线程。 synchronized 内置锁,线程进入该对象的 阅读全文
摘要:
进程、线程、协程 进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源 线程:CPU调度的最小单位,必须依赖进程而存在。 协程:依赖线程而存在,完全由程序所控制,也就是在用户态执行。一个线程的多个协程的运行是串行的。当一个协程运行时,其它协程必须挂起。同样存在上下文切换问题。更 阅读全文