
多线程
文章平均质量分 96
吴顺达
这个作者很懒,什么都没留下…
展开
-
FutureTask 源码阅读 使用Callable创建多线程
接上文线程池源码阅读线程池调用Future<?> submit(Runnable task);返回一个FutureTsk。简单使用public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask<Integer> future = new FutureTask(new MyCallable()); Thread th原创 2021-03-05 18:08:56 · 382 阅读 · 0 评论 -
可重入锁 ReentrantLock AQS 源码解析
使用范例Lock lock = new ReentrantLock();lock.lock();try { dosomething();} finally { lock.unlock();}在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。接口结构Lock是个顶级接口,构建了锁的生态环境void lock();获取锁。如果该锁不可用,则出于线程调度目的,当前线程将被禁用,并处于休眠状态,直到获得该锁为止void lockInterru原创 2020-12-11 23:22:42 · 351 阅读 · 2 评论 -
volatile关键字 可见性 有序性 原子性 内存语义
理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步class VolatileFeaturesExample { volatile long vl = 0L; // 使用volatile声明64位的long型变量 public void set(long l) {...原创 2020-12-09 22:51:03 · 284 阅读 · 0 评论 -
JAVA 线程池ThreadPoolExecutor源码阅读与分析
线程池是什么提前创建好若干个线程,如果有任务需要处理,这些创建好的线程就会开始处理任务,处理完之后线程并不会被销毁而是被保存起来,而是等待下一个任务。为什么需要线程池创建和销毁线程都是消耗系统资源的。线程模型又分为用户线程,与内核线程。用户线程ULT用户程序实现的,不依赖系统核心,应用自己管控线程,不需要进行用户态/内核态的切换。操作系统内核无感知。内核线程KLT系统内核管控,内核保存上下文状态和信息,多处理器情况上能并发运行,线程的创建于同步由内核完成,能够调度CPU资源。一个小测试原创 2020-12-09 00:47:31 · 331 阅读 · 2 评论 -
Java线程池简单使用学习
常用的五种类型线程池newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPoolnewWorkStealingPoolnewFixedThreadPool定长线程池,控制线程最大并发数,超出的任务会在队列中等待。public static void main(String[] args) { ExecutorService pool = Executors.newFixedTh原创 2020-12-07 16:34:21 · 219 阅读 · 0 评论 -
多线程学习之线程的创建与终止
线程的几种创建模式通过实现Runnable接口来创建Thread线程:public class Main { public static void main(String[] args) { MyThread task = new MyThread(); Thread thread = new Thread(task); thread.start(); } static class MyThread implements Runn原创 2020-12-06 16:44:18 · 257 阅读 · 0 评论 -
Java三种创建多线程方法简介
什么是线程现代操作系统在运行一个程序时,会为其创建一个进程。但是现代操作系统调度的最小单元是线程。一个进程由多个线程组成,一个线程也可以创建线程。线程拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换(时间片轮转法等调度算法),让使用者感觉到这些线程在同时执行。(Thread.sleep(1000),并不代表线程睡眠1000毫秒,有可能操作系统...原创 2019-11-05 23:01:37 · 164 阅读 · 0 评论