多线程
wmtmw
之前的博客:https://wmtmw.github.io/
展开
-
线程池中的worker类(未完)
还没认真看,先记下来这是一个要看的点。线程池中的每一个线程都被封装成一个Worker对象,ThreadPool维护的是一组Worker对象。定义//继承AQS,并实现了Runnable接口 private final class Worker extends AbstractQueuedSynchronizer implements Runnable { /** * This class will never be seria原创 2020-06-15 23:53:56 · 530 阅读 · 0 评论 -
SpringBoot中线程池的使用
待补充线程池的配置Service层controller层原创 2020-06-15 23:20:38 · 187 阅读 · 0 评论 -
synchronized
synchronized(this|object)以及synchronized修饰非静态方法是对象锁synchronized(类.class)以及修饰静态方法是类锁。同一个类的不同对象的对象锁不是一把锁同一个类的同一对象的对象锁,同一个类的同一对象的类锁以及同一个类的不同对象的类锁,分别是同一把锁。类锁和对象锁是独立的,互不干扰。判断方法间是否是同步的,关键是判断获取的是否是同一把锁!原创 2020-05-19 17:51:54 · 133 阅读 · 0 评论 -
Java内存模型和volatile
硬件效率与一致性CPU执行计算任务,需要从内存中读取和写入数据,但计算机存储设备和CPU的运算速度有几个数量级的差距。在内存和CPU之间增加一层或多层高速缓存作为CPU和内存之间的缓冲(高速缓存的读写速度接近处理器)。在多核处理器系统中,多个处理器任务都涉及同一块主内存区域时,可能会发生各缓存不一致的现象。引入缓存一致性协议:MSE、MESI、MOSI等。为了使处理器内部运算单元被充分利用,处理器可能会对输入代码进行乱序执行优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果原创 2020-05-19 11:48:50 · 89 阅读 · 0 评论 -
ReentrantLock+Condition实现线程精准唤醒
让三个线程顺序打印A,B,C具体代码import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Main{ public static void main(String[] args) { Test test = new Test();原创 2020-05-10 10:39:09 · 371 阅读 · 0 评论 -
线程加入:join方法
join方法用于等待其他线程终止如果线程A中调用了线程B的join方法,那么线程A阻塞,直到线程B执行完后,线程A从阻塞状态转为就绪状态,等待获取CPU的使用权。join方法要在start方法调用后调用才有效,线程必须启动,再加入。例子1:让两个线程顺序打印1,2,3,即线程A打印123,线程A打印完后,线程B再打印public class Main{ public static void main(String[] args) throws InterruptedException {原创 2020-05-10 00:00:21 · 390 阅读 · 0 评论 -
线程池和阻塞队列
ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<原创 2020-05-09 21:02:31 · 382 阅读 · 0 评论 -
java线程的创建方式
继承Thread类//通过继承Thread类创建NewThread线程class NewThread extends Thread{ public void run(){ System.out.println("create a thread by extends Thread"); }}public class Main{ public static void main(String[] args) {//实例化一个NewThread线程对象 .原创 2020-05-09 11:03:31 · 134 阅读 · 0 评论