
线程
wanting1024
尝试把这几年的积累形成闭环
展开
-
Java基础(四):线程状态
注:以下部分内容摘自《Java编程思想》第四版 线程状态: 新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。 就绪(Runnable):在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行也可以不运行。只要调...翻译 2019-04-16 21:21:25 · 124 阅读 · 0 评论 -
Java基础(七):sleep()和wait(),notify()和 notifyAll(),run()和 start()的区别
sleep()和wait()区别: sleep(long millis) 属于Thread类,参数为毫秒 wait() 属于Object类 当调用sleep()方法时,程序会休眠指定的时间,持有的锁不会释放。 当调用wait()方法时,程序会挂起,并释放锁,直到线程执行notify()方法或者notifyAll()方法或者时间到期。 wait()方法只能在同步控制方法或者同步控制块里调用...原创 2019-04-26 17:20:54 · 389 阅读 · 0 评论 -
Java基础(六):理解CountDownLatch与简单使用
CountDownLatch: 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。简单理解就是可以控制一个动作在指定其他动作完成之后再执行。 位于java.utils.concurrent包下 计数无法重置。如果需要重置计数的版本,考虑使用CyclicBarrier。 方法介绍: void await() 导致当前线程等到锁存器计数到零,除非线程是...原创 2019-04-18 23:21:33 · 301 阅读 · 0 评论 -
Java基础(十):synchronized对比Lock
区别: synchronized是Java的关键字,而Lock是一个Java接口。 synchronized无法判断是否获取到锁,而Lock可以。 synchronized会自动释放锁(a线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁; 用synchronized关键字的两个线...原创 2019-05-03 15:16:40 · 163 阅读 · 0 评论 -
Java基础(九):线程池中 submit()和 execute()方法区别
区别: submit(Callable<T> task)、submit(Runnable task, T result)、submit(Runnable task)归属于ExecutorService接口。 execute(Runnable command)归属于Executor接口。ExecutorService继承了Executor。 submit()有返回值。 exe...原创 2019-04-28 22:45:57 · 4677 阅读 · 0 评论 -
Java基础(十四):ThreadLocal使用及源码分析
ThreadLocal:线程本地变量副本。 当使用ThreadLocal维护变量时,会为每个使用该变量的线程提供独立的变量副本。 每一个线程都可以独立地改变自己的副本,而不会影响其他线程对应的副本。 public class ThreadLocalDemo { //初始化变量 private ThreadLocal threadLocal = ThreadLocal.wit...原创 2019-09-08 19:24:38 · 333 阅读 · 0 评论