![](https://img-blog.csdnimg.cn/20201121112729722.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java多线程
文章平均质量分 72
Java多线程编程
Listen-Y
学无止境
展开
-
Java~多线程算法实战题目之商店售票
文章目录题目描述思路测试PS:这道题是我在面试中遇到的,所以没有链接, 感觉这道题很有意思就拿出来分享分享题目描述有一个商店有100张票,并且有三个售票口, 这三个售票口之间独立, 各卖各的, 但是票不是独立的, 每张票不能重复卖。注意:100张票必须全部卖出, 但是不能多卖。每个窗口每隔100毫秒卖出一张票。要求:输出每张票是被哪个窗口卖出思路这是一个很典型的多线程安全问题, 因为票一旦操作不当就会被重复卖出所以这道题的关键点就在于每个售票口在查看此时票还剩多少和取票这俩个操作必须保原创 2021-03-04 13:50:22 · 481 阅读 · 5 评论 -
Java~多线程算法实战, 三种方式解决LeetCode题目1116. 打印零与奇偶数
文章目录题目描述解决一: 使用死循环方式解法二:使用信号量机制解法三:使用锁机制题目描述假设有这么一个类:class ZeroEvenOdd {public ZeroEvenOdd(int n) { … } // 构造函数public void zero(printNumber) { … } // 仅打印出 0public void even(printNumber) { … } // 仅打印出 偶数public void odd(printNumber) { … } //原创 2021-03-02 13:09:55 · 479 阅读 · 0 评论 -
Java~如何避免死锁,如何检测死锁
文章目录死锁互斥条件不可剥夺条件请求与保持条件循环等待条件如何避免死锁如何检测死锁Jconsole查看死锁Jstack查看死锁:死锁Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题首先了解一下死锁的四个必要条件互斥条件进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。不可剥夺条件进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动原创 2021-01-26 22:24:42 · 561 阅读 · 2 评论 -
多线程(Thread)优缺点比较与应用场景
文章目录多线程出现的原因多线程好处多线程出现的原因线程是一个轻量级的代码块, 他在CPU上进行切换保存上下文的时候的数量级是很小的多线程可以充分利用CPU资源,因为现代计算机的CPU数目是很很多的, 使用多线程可以充分利用起来多线程好处(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;(4)可以随时停止任务;原创 2021-01-24 17:04:15 · 1138 阅读 · 0 评论 -
Java~深度剖析synchronized与ObjectMonitor、volatile和内存屏障
文章目录synchronized的三种应用方式理解Java对象头与Monitor可以得出结论Java虚拟机对synchronized的优化偏向锁轻量级锁锁消除锁粗化总结volatilevolatile与内存屏障总结在Java中, 造成线程安全问题的主要原因就是JMM内存模型, 其让每个线程都有自己的工作内存, 而每个工作内存中的数据都是统一由进程汇总完全复制得来, 俺么当他们自己内存中数据放回到进程中内存的是就会出现数据不一致的问题因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享原创 2020-12-25 16:16:31 · 1300 阅读 · 1 评论 -
Java~并发编程CAS和AQS原理刨析
文章目录什么是CAS原理剖析CAS的使用ABA问题耗能问题实现计数器什么是AQSAQS实现原理AQS的使用什么是CASCAS的全称是Compare And Swap , 顾名思义就是比较和交换他是一个乐观锁, 是解决多线程并行情况下使用重量级锁造成性能损耗的一种机制CAS操作包含三个操作数:内存值预期原值新值如果内存值的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值并且返回true。否则,处理器不做任何操作返回false。原理剖析在JAVA中,sun.misc.U原创 2020-12-20 12:18:09 · 343 阅读 · 1 评论 -
Java~HashMap1.7与1.8对比, ConcurrentHashMap 1.7和1.8对比, concurrent包下安全集合类的对比
文章目录HashMap1.7与1.8对比ConcurrentHashMap 1.7和1.8对比安全的List安全的Set安全的mapHashMap1.7与1.8对比JDK1.7的时候使用的是数组+ 单链表的数据结构。但是在JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构(当链表的深度达到8并且数组长度到达64的时候,也就是默认阈值,就会自动扩容把数组中具体这一个链表转成红黑树的数据结构来把时间复杂度从O(n)变成O(logN)提高了效率, 如果后续在该红黑树中删除元素, 删到只剩6的时候就会原创 2020-12-03 18:46:11 · 456 阅读 · 0 评论 -
复习进程与线程, 复习对比synchronize的和lock
文章目录进程与线程对比线程的状态wait和sleep的对比Synchronized和Lock对比synchronized实现生产者消费者和lock实现生产者消费者进程与线程对比进程是操作系统资源分配的最小单位, 线程一旦运行就是进程线程是处理器调度和执行的最小单位, 是进程下的独立的一个执行载体一个进程最少包括一个线程, 也就是进程中的任务是由线程去执行的java中默认线程有俩个, 一个是main主线程, 一个是GC线程每个进程都有独立的代码和内存(数据和上下文),程序之间的切换会有较大的开销原创 2020-12-02 20:31:46 · 333 阅读 · 0 评论 -
JavaIO流中的BIO、NIO、AIO的区别和对比
文章目录BIONIOAIO总结BIOBIO的java传统的IO模型, 他是一种同步阻塞的模式,当我们数据在写入和读取的时候, 必须等待线程的完成才能进行下一个任务在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续原创 2020-12-02 16:50:29 · 705 阅读 · 0 评论 -
Java~线程池与线程池的优化
文章目录线程池核心线程池定长线程池(FixedThreadPool)定时线程池(ScheduledThreadPool )可缓存线程池(CachedThreadPool)单线程化线程池(SingleThreadExecutor)总结对其进行优化七个参数线程池最大线程数目优化线程池程序的运行要创建进程, 进程中任务的执行要创建线程去执行, 而频繁的创建线程是很耗费资源的,为了优化资源就采用了池化技术, 比如线程池和数据库连接池池化技术就是事先准备好一些资源, 有人要拿就去用, 没人拿就放那原创 2020-12-01 21:00:49 · 712 阅读 · 0 评论 -
Java~学习Executor框架, 了解ThreadPoolExecutor和ScheduledThreadPoolExecutor
文章目录Executor框架Executor框架的结构Executor框架的成员ThreadPoolExecutorScheduledThreadPoolExecutorFuture接口Runnable接口和Callable接口Executor框架Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开 来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。Runnable这个执行单元主要执行没有返回值的单元, 而Callable原创 2020-10-14 22:31:57 · 437 阅读 · 1 评论 -
Java~并发流程控制的手段CountDownLatch、CyclicBarrier、Semaphore和Exchanger工具类的学习和使用
文章目录等待多线程完成的CountDownLatch同步屏障CyclicBarrierCyclicBarrier和CountDownLatch的区别控制并发线程数的Semaphore线程间交换数据的Exchanger等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。他的使用场景比如我么需要计算数据, 这个数据很庞大, 所以我们需要使用十几个线程去计算这些数据, 然后在使用一个主线程去汇总这些数据, 那么这个主线程什么时候去启动让他去执行呢原创 2020-10-14 18:24:33 · 353 阅读 · 0 评论 -
Java~Fork/Join框架的基本原理、设计方式、应用与实现
文章目录什么是Fork/Join框架Fork/Join框架的设计Fork/Join框架的应用统一异常处理Fork/Join框架的实现原理ForkJoinTask的fork方法实现原理ForkJoinTask的join方法实现原理什么是Fork/Join框架我们通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务切分 为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结 果。比如计算1+2+…+10000,可以分割成10个子任务,每个原创 2020-10-14 16:19:00 · 641 阅读 · 0 评论 -
Java~并发容器ConcurrentHashMap、ConcurrentLinkedQueue、阻塞队列BlockingQueue的实现原理与使用
文章目录ConcurrentHashMap对比HashMap和HashTableConcurrentHashMap的结构原理get操作put操作size操作ConcurrentLinkedQueueConcurrentLinkedQueue的结构原理入队列出队列阻塞队列BlockingQueueJava里的六个阻塞队列(了解)ConcurrentHashMap对比HashMap和HashTable在并发编程中使用HashMap可能导致程数据序数据出错严重还会导致死循环。而使用线程安全的HashTabl原创 2020-10-14 14:33:23 · 638 阅读 · 0 评论 -
Java~重排序给多线程带来的影响, 包括volatile域和final域的重排序规则
文章目录重排序数据依赖性重排序对多线程的影响如果解决?volatile域的重排序规则final域的重排序规则写final域的重排序规则读final域的重排序规则如果final域修饰的是引用类型重排序在Java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。局部变量(Local Variables),方法定义参数(Java语言规范称之为Formal Method Parameters)和异常处理器参数(ExceptionHandler Parameters)不会在线程之间共享,它原创 2020-10-13 11:26:24 · 526 阅读 · 1 评论 -
Java~处理器和Java实现原子操作的原理
文章目录原子操作处理器实现原子操作的原理使用总线锁保证原子性使用缓存锁定保证原子性Java如何实现原子操作使用循环CAS实现原子操作使用CAS的三个问题使用锁机制实现原子操作原子操作原子(atomic)本意是“不能被进一步分割的最小粒子”’,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。处理器实现原子操作的原理使用总线锁保证原子性如果多个处理器同时对共享变量进行读改写操作(i++就是经典的读改写操作),那么共享变量就会被多个处理器同时进行操作,这样读改写原创 2020-10-12 22:22:01 · 363 阅读 · 0 评论 -
Java~什么是线程组? 演示线程与线程组的统一异常处理器Handler
文章目录线程组线程对象关联线程组 (一级管关联)线程组的批量停止线程中出现异常的统一处理指定线程对象进行异常统一处理指定线程类的所有线程对象进行异常统一处理线程组内异常处理器线程异常处理的传递线程组可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程。这样的组织结构有些类似于树的形式。线程组的作用是,可以批量的管理线程或线程组对象,有效地对线程或线程组对象进行组织。线程对象关联线程组 (一级管关联)所谓的1级关联就是父对象中有子对象,但并不创建子孙对象。原创 2020-10-11 18:54:39 · 358 阅读 · 0 评论 -
Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法
文章目录Timer常见问题方法schedule(Timer Task task, long delay)方法schedule(Timer Task task, long delay, long period)cancel方法TimerTask类的cancel()方法Timer类的cancel()方法timer.cancel的最常见一个问题对比schedule和scheduleAtFixedRate方法TimerTimer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务原创 2020-10-11 16:30:16 · 1984 阅读 · 5 评论 -
Java~使用ReentrantReadWriteLock类实现: 读读共享, 写写互斥, 读写互斥,写读互斥
文章目录ReentrantReadWriteLock类读读共享写写互斥读写互斥写读互斥ReentrantReadWriteLock类类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。这样做虽然保证了实例变量的线程安全性,但效率却是非常低下的。所以在JDK中提供了一种读写锁ReentrantReadWriteLock类,使用它可以加快运行效率,在某些不需要操作实例变量的方法中,完全可以使用读写锁ReentrantRea原创 2020-10-11 13:48:30 · 1092 阅读 · 2 评论 -
Java~多线程ReentrantLock类常用的十四个方法, 使用Condition实现多线程的顺序执行
文章目录方法getHoldCount()方法getQueueLength()方法getWaitQueueLength()方法hasQueuedThread()和方法hasQueuedThreads()方法hasWaiters()方法isFair()方法isHeldByCurrentThread()方法isLocked()方法lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUnit unit)方法awaitUninterruptibly()方法aw原创 2020-10-10 18:40:49 · 835 阅读 · 0 评论 -
Java~多线程ReentrantLock的公平锁和非公平锁 ,结合Condition实现部分路通知和选择路通知
文章目录ReentrantLock演示ReentrantLock的同步功能ReentrantLock的公平锁与非公平锁代码演示Condition对象监视器演示Condition的等待与通知实现部分路通知和选择路通知ReentrantLock在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能,而且在使用上也比 synchronized更原创 2020-10-10 16:01:37 · 443 阅读 · 0 评论 -
Java~“全局数据盒“ --类ThreadLocal和InheritableThreadLocal的使用
文章目录ThreadLocalget与set方法隔离性覆盖initialValue方法类InheritableThreadLocal的使用演示值继承ThreadLocal类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据。而这个盒子里存放的数据是以map的形式将其对应的线程关联起来.get与set方法首先看其源码public T get() { //获取当前线程原创 2020-10-10 00:00:39 · 709 阅读 · 3 评论 -
Java~源码对比方法join(long)与sleep(long), 解决join()后面代码提前运行的原因
文章目录sleep(long)源码join(long)源码小结join()后面代码提前运行的原因sleep(long)源码 //native关键字说明其修饰的方法是一个原生态方法, //方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。 //Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。 public static native void sleep(long millis) throws原创 2020-10-08 22:14:39 · 429 阅读 · 0 评论 -
Java~通过管道进行线程间通信: (字节流与字符流)
文章目录字节流代码演示字符流代码演示在Java语言中提供了各种各样的输人/输出流Stream,使我们能够很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输人管道中读数据。通过使用管道,实现不同线程间的通信,而无须借助于类似临时文件之类的东西。在Java的JDK中提供了4个类来使线程间可以进行通信:字节流: PipedInputStream和PipedOutputStream字符流: PipedRe原创 2020-10-08 21:15:11 · 994 阅读 · 1 评论 -
Java~Thread的API是如何改变线程的状态和分析解决生产者|消费者模型中的假死现象与wait条件改变异常
文章目录首先了解Thread的API是如何改变线程的状态的wait条件改变异常首先了解Thread的API是如何改变线程的状态的1)新创建一个新的线程对象后,再调用它的start()方法,系统会为此线程分配CPU资源,使其处于Runnable(可运行)状态,这是一个准备运行的阶段。如果线程抢占到CPU资源,此线程就处于Running(运行)状态。2)Runnable状态和Running状态可相互切换,因为有可能线程运行一段时间后,有其他高优先级的线程抢占了CPU资源,这时此线程就从Running状原创 2020-10-05 14:51:52 · 525 阅读 · 2 评论 -
Java~多线程关键字volatile和synchronized的特性比较
文章目录比较volatile的非原子特性使用原子类来进行++操作原子类也不一定是线程安全的关键字synchronized代码块有volatile同步变量的功能比较线程安全主要就是原子性和可见性俩个方面, Java中的同步机制就是围绕这俩个方面来确保线程的安全.通过使用volatile关键字,是强制的从公共内存中读取变量的值, 是线程同步的轻量级实现, 所以volatile性能肯定比synchronized要好,并且 volatile只能修饰于变量,而synchronized可以修饰方法,以及代码原创 2020-10-04 22:05:46 · 619 阅读 · 1 评论 -
Java~常见的俩个锁对象改变的问题 (字符串对象的改变和对象属性的改变)
文章目录字符串对象的改变对象属性的改变注意一个问题如果多个线程同时持有锁对象, 且同时持有的是相同的锁对象, 那么这些线程之间的任务就是同步的, 如果分别持有不同的锁对象, 那么就是异步的.字符串对象的改变任务代码/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-10-03 * Time:原创 2020-10-03 22:00:05 · 760 阅读 · 7 评论 -
Java~使用JDK自带的工具来检测是否有死锁的现象
文章目录多线程的死锁使用JDK检测死锁多线程的死锁Java线程死锁是一个经典的多线程问题, 因为不同的线程都在等待根本不可能被释放的锁, 从而导致线程中的任务无法完成下面演示互相等待对方锁释放的死锁/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-10-03 * Time: 20:37 */原创 2020-10-03 21:02:29 · 1192 阅读 · 6 评论 -
Java~使用synchronized修饰静态方法带来的问题 与 同步synchronized代码块不使用String作为锁对象的原因
文章目录使用synchronized修饰静态方法带来的问题同步synchronized代码块不使用String作为锁对象的原因使用synchronized修饰静态方法带来的问题直接上代码/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-09-29 * Time: 11:39 */public原创 2020-09-29 20:08:27 · 778 阅读 · 1 评论 -
Java~介绍线程的优先级的三大特性和守护线程
文章目录线程的优先级源码分析继承性规则性随机性守护线程线程的优先级在操作系统中, 线程可以划分优先级, 优先级较高的会先得到CPU的资源较多, 也就是会优先执行优先级高的线程中的任务通过设置优先级有助于帮"线程规划期"确定下一次选择哪个线程来优先执行线程中优先级分为1~10这10个等级, 如果你设置的大于10或者小于1, 则JDK会抛出异常throw new IllegalArgumentException()源码分析/** * The minimum priority that原创 2020-09-29 09:58:00 · 500 阅读 · 1 评论 -
Java~在使用isAlive时, 将线程对象已构造参数的形式传递给Thread对象时进行start启动时, 使用this和Thread.currentThread的差异
文章目录currentThread()方法isAlive()方法使用this和Thread.currentThread的差异currentThread()方法该方法可返回代码段正在被哪个线程调用的信息代码示例/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-09-28 * Time: 21:54原创 2020-09-28 22:32:11 · 390 阅读 · 0 评论 -
JavaWeb~为什么要引入线程池? 如何自己简单实现一个线程池?
文章目录为什么要引入线程池?如何自己简单实现一个线程池线程池核心操作线程池的组成部分完整代码+测试为什么要引入线程池?我们知道我们每次创建 启动 销毁一个线程的消耗是较大的 所以引入线程池的最大的好处就是减少每次启动 销毁线程的损耗那么他是如何实现减少的?在线程池里有一个阻塞队列 他会记录并储存要执行的任务 并且他内部又会有一个或者几个线程去取队列的首元素任性任务简单举个例子来说就是 有一个快递站 来一个快递 快递站老板就会雇佣一个学生去送快递 然后马上解雇人家 再来一个快递他又会雇佣一个学生原创 2020-06-14 18:34:22 · 927 阅读 · 1 评论 -
JavaWeb~教你如何自己实现一个定时器
文章目录什么是定时器实现定时器需要什么完整代码+测试什么是定时器定时器是多线程编程中的一个重要的组件好比一个闹钟 定好一个时间让一个线程去执行定时器在网络编程中特别常见实现定时器需要什么需要一个Task类来描述一段逻辑或者说是一个要执行的任务 同时要记录这个任务在啥时候执行// 优先队列中的元素必须是可比较的~ // 比较规则的指定主要是两种方式: // 1. 让 Task 实现 Comparable 接口 // 2. 让优先队列构造的时候, 传入一个比较器对象原创 2020-06-14 10:23:01 · 1209 阅读 · 1 评论 -
JavaWeb~实现生产者消费者模型(BlockingQueue阻塞队列)
文章目录如何实现生产者消费者模型?实现阻塞队列代码分析如何实现生产者消费者模型?简单来说就是使用阻塞队列来实现该模型阻塞队列的实现:阻塞队列依旧是一个先进先出的队列入队列时如果发现队列满了,就会阻塞,直到其他线程调用出队列操让队列有空位之后 ,才能继续入队列出队列的时候如果发现队列为空,也会阻塞, 直到其他线程调用入队列操作rag队列有元素,才能继续出队列实现阻塞队列//阻塞队列public class BlockingQueue { private int[] arr原创 2020-06-13 16:08:05 · 2059 阅读 · 0 评论 -
JavaWeb~用饿汉模式、懒汉模式(高性能线程安全版)分别实现单例模式
文章目录什么是单例模式?饿汉模式懒汉模式高性能版懒汉模式什么是单例模式?单例模式是一种常见的设计模式 所谓设计模式就是在开发过程中为了避免出现很多问题所规定的一套"棋谱"一样的东西常见场景: 在数据库JDBC编程中 我们用到的DataSource这样的类就是一个单例模式的类 在一个程序中 就只有一个实例 不应该创建多个DataSource对象 还有一些服务器里用到的数据管理器 也是单例的使用俩种经典的方式饿汉模式 和 懒汉模式 就可以实现以上场景 保证一个类只能有一个实例饿汉模式饿汉模式原创 2020-06-12 15:27:06 · 729 阅读 · 0 评论 -
JavaWeb~线程之间的通信 对象的等待集wait set -- wait() 、notify()
文章目录认识对象的等待集wait()方法notify()方法竞态条件问题wait与sleep的对比认识对象的等待集wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,使当前线程被唤醒(进入“就绪状态”)notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程, 然后这些线程再原创 2020-06-11 11:34:08 · 585 阅读 · 0 评论 -
JavaWeb~多线程带来的风险(线程安全问题)--synchronized和volatile关键字的使用
文章目录1.体会线程的不安全2.了解线程安全的概念3.线程不安全的几大原因3.1线程是抢占式执行(不安全的万恶之源)3.2不是原子性的3.3多个线程尝试修改同一个变量3.4内存可见性导致的线程安全问题3.4.1volatile的理解3.4.2volatile的使用3.5指令重排序导致多线程不安全4.如何解决线程不安全问题4.1锁的特点4.2锁如何解决线程不安全问题?4.3理解synchronized(锁)4.4synchronized的使用4.4.1synchronized 关键字写到普通方法前4.4.2s原创 2020-06-10 08:15:42 · 731 阅读 · 0 评论 -
JavaWeb~玩转Thread类 如何中断一个线程 认识线程的状态
文章目录Thread类构造方法常见方法获取属性启动线程 start()中断线程 interrupt()通过共享的标记来进行沟通(温和)调用 interrupt() 方法来通知(刚烈)等待线程 join()获取当前线程的引用 currentThread()休眠线程 sleep()线程的状态线程的所有状态线程状态的意义线程状态的转移Thread类Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的 Thread 对象与之关联。Thread 类的对象就是用来描述一个线程执行流原创 2020-06-07 15:40:23 · 479 阅读 · 0 评论 -
JavaWeb~带你全面认识理解 进程 与 线程
文章目录进程进程的初步认识PCB的数据结构调度器用到哪些PCB信息优先级并发与并行内核态与用户态上下文进程状态时间片记账信息线程认识线程为什么要引入线程多种创建线程的方式多线程的优势-增加运行速度进程进程的初步认识对于操作系统来说,一个任务就是一个进程(Process)进程是操作系统分配资源的最小单位进程是操作系统中非常重要的软件资源,把一个可执行程序跑起来 (.exe文件) 系统就会创建一个对应的进程,如果这个程序执行结束系统随之会销毁所对应的进程所以进程就可以看做是一个程序执行的"过程"原创 2020-06-05 15:17:11 · 709 阅读 · 1 评论 -
Java~源码分析为什么ArrayList是线程不安全的, 如何将其变为线程安全的
文章目录ArrayList不是线程安全的,使用一个案例演示结果分析需要线程安全怎么办?源码分析其为何安全?ArrayList不是线程安全的,使用一个案例演示任务类import java.util.List;/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-09-27 * Time: 15:42原创 2020-09-27 16:18:44 · 1284 阅读 · 0 评论