多线程
文章平均质量分 62
JiangZW187
这个作者很懒,什么都没留下…
展开
-
线程池原理
线程池1、为什么使用线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行的任务的程序都可以使用线程池。线程池的使a用能够带来三个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,会消耗资源,降低系统的稳定性。2、线程池的实现原理当线程池提交一个任务之后,线程池是如何处理这个任务的?从图中可以看出,当提交一个新任务到线程池原创 2021-05-29 12:35:34 · 202 阅读 · 0 评论 -
Synchronized原理
Synchronized原理1、Synchronized使用//synchronized代码块synchronized (SynchronizedTest.class){ System.out.println("进入同步代码块");}//synchronized代码方法public synchronized void testFun(){ System.out.println("进入同步方法");}字节码:public class SynchronizedTest {原创 2021-05-20 21:28:19 · 100 阅读 · 0 评论 -
CAS
CAS问题1、共享资源的访问public interface Account { ///查询钱 Integer getBalance(); //取钱 void withDraw(Integer amount); //设置一个静态方法,设置1000个线程 每个线程取钱 ///在控制台打印余额和耗时 static void demo(Account account){ List<Thread> ts = new Ar原创 2021-05-08 15:30:52 · 89 阅读 · 1 评论 -
Volatile
Volatilevloatile关键字是Java虚拟机提供的最轻量级的同步机制,本文介绍volatile的作用和底层实现原理。1、volatile解决线程安全性问题我们说过,在多线程中存在竟态条件,会出现线程安全性问题volatile关键字作用是保证可见性和有序性,并不会保证原子性。volatile可以解决可见性问题class ThreadDemo1 implements Runnable{ public volatile boolean flag = false; @Ove原创 2021-05-08 13:39:40 · 69 阅读 · 0 评论 -
Java内存模型(JMM)
Java内存模型 在并发程序中,涉及到操作系统的底层,因此我们很难去判断程序的执行是怎样的。同时涉及到多个线程对共享资源的访问。一致性和安全性将会受到严重挑战。所以,我们需要保证多个线程正确的协同工作。Java内存模型可以帮助我们解决这些问题。# Java内存区域(结构)和Java内存模型1. java内存区域和Java内存模型是两个不一样的东西。内存区域是指JVM运行时将数据分区域存储,强调与内存空间的划分。2. Java内存模型时定义了线程和主内存之间的抽象关系,用来屏蔽各种硬件和操作系统的原创 2021-04-17 16:33:23 · 71 阅读 · 0 评论 -
线程安全问题
线程安全问题1. 什么是线程安全要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享(Shared)的、可变(Mutable)的状态的访问。共享:变量可以由多个线程同时访问。可变:变量的值在其生命周期内可以发生变化。一个对象是否是线程安全的,取决于他是否被多个线程同时访问。这指的是程序中访问对象的方式,而不是对想要实现的功能。要使得对象是线程安全的,需要采用同步机制来协同对对象可变状态的访问。2. 竟态条件当某就算的正确性取决于多个线程的交替执行时序时,那么就会发生竟态条件。最原创 2021-04-17 20:23:22 · 84 阅读 · 0 评论 -
生产者消费者问题
生产者消费者问题生产者与消费者问题是多线程同步问题的经典案例。也称有限缓冲问题。# 什么是生产者消费者问题该问题描述了共享固定大小缓冲区的线程,生产者的主要作用是生成一定量的数据放到缓冲区,消费者也在缓冲区消耗这些数据。这类问题的关键在于保证生产者不会在缓冲区满时加入数据,消费者也不会下缓冲区空时消耗数据。# 如何解决这类问题生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据原创 2021-04-15 09:58:27 · 113 阅读 · 0 评论 -
线程的其他方法
线程的其他方法1. 终止线程一般来说线程的执行完毕就会结束,无需手动关闭。但当我们需要手动杀死一个正在运行的线程。可以通过一些方法。stop方法(废弃)# stop()方法不推荐使用因为stop()方法太暴力,会强制杀死线程。这就类似于: 你正在写文档,突然停电,文档没有保存。在程序运行过程中,强制杀死线程,线程还没有来得及保存上下文就结束了。public class Demo1 { public static void main(String[] args) {原创 2021-04-11 11:06:58 · 75 阅读 · 0 评论 -
创建线程的方式
创建线程的方式1、Thread类构造方法// Thread类源码private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals)我们解释在初始化方法中的参数:ThreadGroup g 线程组,指定这个线程是在哪个线程组下Runnable target 指原创 2021-04-11 11:04:58 · 60 阅读 · 0 评论 -
多线程基本概念
多线程中的几个概念1、 线程的进程的区别每个正在运行系统上运行的程序都是一个进程。每个进程中包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序中独立执行。也可以把它理解为代码运行的上下文。因此线程基本上是轻量级的进程,它负责在单个程序中执行多任务。进程是所有线程的集合,每一个线程是进程中的一条执行路径。2、 并发(Concurrency)和并行(Parallelism)无论是单CPU还是多CPU,操作系统都营造出了同时运行多个程序的假象。实际的过程是CPU的快速切换。原创 2021-04-11 11:03:53 · 65 阅读 · 0 评论