JAVA-多线程
qq_33617861
这个作者很懒,什么都没留下…
展开
-
JAVA多线程之ThreadLocal详解
JAVA多线程之ThreadLocal详解 概述 在java多线程编程中,大部分的变量都不是线程安全的,多个线程间同时使用同一个变量便会产生各种问题,我们可以使用synchronized等同步方案解决,但是同步是要牺牲一定性能的,很多情况下我们并不需要这种方案,于是便有了一种牺牲空间的方案:ThreadLocal变量 简介 ThreadLocal结构 ThreadLocal为每一个线程维护了一个副本变量,多个线程之间对各自副本变量的修改肯定不会产生相互的的影响 我们先来看一下ThreadLocal的结构图,原创 2020-08-18 15:33:47 · 213 阅读 · 0 评论 -
java线程间通信
java线程间通信 java线程间通信模型可分为两种:共享内存和消息传递。该文章主要对共享内存的方式介绍线程间的通信 一、volatile 关键字 使用volatile关键字修饰变量,将会使变量线程间可见即每次获取都是最新的值。如下文的示例代码,通过volatile修饰标志变量flag,使得线程在获取flag的值时总是最新的,每个线程对flag进行更改,以此达到线程间的通信 public class VolatileDemo { volatile Boolean flag = false;原创 2020-08-17 19:11:28 · 122 阅读 · 0 评论 -
JAVA线程池解析
JAVA线程池 为什么要用线程池 概念 我们在数据库连接池中也接触过,那线程池顾名思义就是存放线程的池子,是一个容器,我们预先创建若干线程放在容器中,使用的时候直接拿来用,用完放回去。 优势 线程的创建与销毁是要消耗系统资源的,使用线程池能够一定程度上减少这一部分的开销 当有任务到达时,直接从线程池中取线程来复用,肯定要比新建线程快,这便能提高系统的响应速度 线程池可以对线程进行统一管理,避免随便开启线程导致内存溢出的问题,同时可以避免cpu的过度切换 提供一些扩展功能,如延时、定时线程池 自定义线程池原创 2020-08-17 11:17:42 · 119 阅读 · 0 评论 -
有返回值的多线程:Callable与Future、FutureTask
有返回值的多线程:Callable与Future、FutureTask Callable Callable是一个泛型接口,只实现了一个call()方法,这个跟Runnable类似,但是call()方法返回了一个传入的泛型结果,并且该方法是会抛出异常的 public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @r原创 2020-08-17 11:15:09 · 348 阅读 · 0 评论 -
JAVA线程创建的基本方式
线程创建的基础方式 线程创建主要分为两大类,一类是实现Runnable、Callable或继承Thread类后直接创建,另一种是通过线程池创建 继承Thread类创建线程 Thread类实际上是实现了Runnable类并实现了run()方法,我们在继承Thread类后,也需要重写run()方法,在run()方法中实现我们的业务逻辑,并调用子类的start()方法,开启一个线程并执行业务; // 继承Thread类,重写run()方法 public class ThreadDemo extends Threa原创 2020-08-12 15:14:51 · 113 阅读 · 0 评论