Java 并发编程
文章平均质量分 94
学习并发编程的魅力
IT__learning
这个作者很懒,什么都没留下…
展开
-
Java 线程池
概述1、什么是线程池线程池就是首先创建一些线程,它们的集合称为线程池,使用线程池可以很好的提高性能。线程池在系统启动时就创建大量空闲的线程,程序将一个任务传给线程池。线程池就会启动一条线程来执行这个任务,执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。2、为什么使用线程池在执行异步任务或并发任务时,如果通过 new Thread() 方式创建新的线程,当系统不断的启动和关闭新线程以及过渡切换线程,会过度消耗系统资源,成本非常高,从而导致系统资源的崩溃,这时线原创 2021-12-29 15:59:53 · 400 阅读 · 0 评论 -
Java 基础 —— 线程概念
1、进程与线程(1)进程进程是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。(2)线程线程是操作系统能够独立调度和分派的最小单位,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流。线程(Thread)是进程中的基本执行单元,在进程入口执行的第一个线程被视为这个进程的主线程。一个进程可以有一个或多个线程,各个线程之间共享程序内存空间(也就是所在进程的内存空原创 2021-05-17 23:53:24 · 442 阅读 · 2 评论 -
Java 基础 —— synchronized 关键字详解
一、synchronized 三大特性在多线程的环境下,多个线程同时访问共享资源会出现一些问题,而 synchronized 关键字则是用来保证线程同步的。synchronized 关键字可以保证并发编程的三大特性:原子性、可见性、有序性。而 volatile关键字只能保证可见性和有序性,不能保证原子性,也称为是轻量级的 synchronized。(1)原子性:一个或多个操作要么全部执行成功,要么全部执行失败。synchronized 关键字可以保证只有一个线程拿到锁,访问共享资源。(2)可见性:原创 2021-11-03 13:04:04 · 1962 阅读 · 0 评论 -
Java 基础 —— 线程安全
一、线程安全问题线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的一个程序在运行起来的时候会转换成进程,通常含有多个线程。通常情况下,一个进程中的比较耗时的操作(如长循环、文件上传下载、网络资源获取等),往往会采用多线程来解决。又比如实际生活中,银行取钱问题、火车票多个售票窗口的问题,通常会涉及到并发的问题,从而需要多线程的技术。当进程中原创 2021-10-31 19:52:09 · 9000 阅读 · 1 评论 -
Java 基础——线程的创建与使用
一、线程的创建方式1、继承 Thread 类① 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。② 创建Thread子类的实例,即创建了线程对象。③ 调用线程对象的start()方法来启动该线程。线程特性:● 线程能被标记为守护线程,也可以是用户线程● 每个线程均分配一个name,默认为(Thread-自增数字)的组合● 每个线程都有优先级(1-10),默认为5。高优先级线程优先于低优先级线程执行。● m原创 2021-10-27 00:36:00 · 481 阅读 · 0 评论 -
Java 基础——线程间通信
概述线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题。虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信。线程通信主要可以分为三种方式,分别为共享内存、消息传递和管道流:(1)共享内存1)volatile 关键字2)synchronized 关键字3)Lock 锁(2)消息传递1)Object 的 join()/notify() 机制;2)Lock 和 Condition 的原创 2021-11-03 09:31:40 · 966 阅读 · 0 评论 -
Java并发编程的艺术——Java并发机制的底层实现原理
一、volatile 的应用volatile 是轻量级的 synchronized ,保证了共享变量的“可见性”。它比所以你 synchronized 运行成本低。“可见性”指的是一个线程在修改变量时,另一个线程可以读到这个值。而且它不会引起线程上下文的切换和调度。1、volatile的定义与实现原理Java 语言规范对 volatile 的定义如下:Java 编程语言允许线程访问共享变量,为了确保共享变量能够被准确和一致性地更新,线程应该确保通过排他锁单独获得这个变量。Java 语言提供了 v.翻译 2021-06-10 00:09:35 · 177 阅读 · 0 评论 -
Java并发编程的艺术——并发编程的挑战
目录一、上下文切换多线程一定快吗测试上下文切换次数和时长如何减少上下文切换减少上下文切换实战二、死锁三、资源限制的挑战一、上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的翻译 2021-06-09 11:01:34 · 112 阅读 · 0 评论