java多线程学习
文章平均质量分 63
没拖拉机的斯基
分享分享
展开
-
Java线程池详解
Java线程池是Java并发学习中的一个重要知识点,线程池在实际开发过程中有着重要的作用,也是面试过程中重要的考题。针对线程池的核心参数,运行机制进行详细描述。原创 2023-05-07 15:04:33 · 758 阅读 · 0 评论 -
两个线程轮流打印奇数和偶数,输入enter停止
解决思路使用lock,设置判断终止的标志位。原创 2022-07-30 10:15:52 · 258 阅读 · 0 评论 -
三个线程顺序打印ABC
题目实现三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc。实现使用Lock和Conditionimport java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class MyThreadOut { static Lock原创 2022-03-27 10:15:05 · 1504 阅读 · 0 评论 -
JVM内存模型
JVM内存模型内存区域划分jdk 1.8之前jdk 1.8程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完。另外,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。从上面的介绍中我们知道程序计数器主要有两个作用:原创 2021-08-24 10:34:44 · 85 阅读 · 0 评论 -
并发学习之锁类型概述
锁的概述乐观锁与悲观锁悲观锁指对数据被外界修改持保守态度,认为数据很容易就会被其他线程修改,所以在数据被处理前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制,即在数据库中,在对数据记录操作前给记录加排它锁。如果获取锁失败,则说明其他数据正在被其他线程修改,当前线程则等待或者抛出异常。如果获取锁成功,则对记录进行操作,然后提交事务后释放排它锁。乐观锁是相对悲观锁来说的,它认为数据在一般情况下才不会造成冲突,所以在访问记录前不会加排它锁,而是在进行数据原创 2021-07-23 15:06:56 · 99 阅读 · 0 评论 -
线程创建的方式
线程创建的几种方式1、继承Thread类启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。import java.util.concurrent.TimeUnit;public class demo1 { public static void main(String[] args) { myThread my = new myThread(); //创建子线程原创 2020-07-15 16:27:04 · 84 阅读 · 0 评论 -
synchronized和lock的区别
synchronized和lock的区别synchronized为java的关键字;lock是java的类synchronized不需要用户手动释放锁,代码执行完成自动释放;ReetrantLock则需要手动释放锁,否则会产生死锁synchronized不可中断,除非抛出异常或正常完成;ReetrantLock可中断,两种方法:(1)设置超时方法 (2)interrupt()调用加锁是否公平:synchronized是非公平锁;ReetrantLock可公平、可非公平,默认为非公平锁锁绑定多个条原创 2020-07-15 15:41:08 · 253 阅读 · 0 评论 -
生产者消费者模型实现
生产者-消费者模型实现生产者-消费者是多线程必谈的一个话题,本文利用synchronized、lock以及BlockingQueue分被实现生产者消费者模型。使用synchronizedpublic class ProducerAndConsumer { public static void main(String[] args) { shareData sd = new shareData(); new Thread(()->{ //生产者线程原创 2020-07-15 15:30:16 · 150 阅读 · 0 评论