[汇总]Thread线程经验
线程的调度是根据cpu的算法,如果线程的运算量不大,cpu算法调度线程不一定会平均分配给每个内核的。那意思是如果运算量大的话,就会使用到其他的内核咯?
-
时间片 -
超线程 -
上下文切换 -
切换查看 -
线程调度 -
引起线程上下文切换的因素
如何停止一个正在运行的线程
建议使用“抛异常”的方法来实现线程的停止,因为在catch块中还可以将异常向上抛,使线程停止事件得以传播。
8种线程顺序执行的方法
[1] 使用线程的join方法[2] 使用主线程的join方法[3] 使用线程的wait方法[4] 使用线程的线程池方法[5] 使用线程的Condition(条件变量)方法[6] 使用线程的CountDownLatch(倒计数)方法[7] 使用线程的CyclicBarrier(回环栅栏)方法[8] 使用线程的Semaphore(信号量)方法
进程、线程基础知识全家桶,30 张图一套带走
非常内核全面
学完 CompletionService,可以做时间管理大师?
1 2 3 4 5 |
//executorService 里会等待最后一个完成的Future,然后一起返回。 ExecutorService executorService = Executors.newCachedThreadPool(); Future<Integer> future_15 = executorService.submit(() -> { return 15; }); |
1 2 3 4 5 6 |
//executorService会让先执行完毕的completionService先返回 ExecutorService executorService = Executors.newCachedThreadPool(); ExecutorCompletionService<String> completionService = new ExecutorCompletionService<>(executorService); completionService.submit(() -> { return "15"; }); |
-
内存泄露 -
线程池中线程上下文丢失 -
并行流中线程上下文丢失
synchronized 加锁 this 和 class 的区别!
当使用 synchronized 加锁 class 时,无论共享一个对象还是创建多个对象,它们用的都是同一把锁,而使用 synchronized 加锁 this 时,只有同一个对象会使用同一把锁,不同对象之间的锁是不同的。
Disruptor 是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由 LMAX 提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理 6 百万笔订单。