Java多线程基础知识
文章平均质量分 92
小智coding
这个作者很懒,什么都没留下…
展开
-
并发线程基础第九篇
AQS(AbstractQueuedSynchronizer)是java中用于构建锁和同步器的抽象基类。它提供了一种基于FIFO等待队列的锁和同步器的实现框架,是并发编程中实现锁和同步器的重要基础。AQS提供了两种基本的同步原语:独占锁和共享锁。独占锁是指同一时刻只能有一个线程持有的锁,典型的代表是ReentrantLock。共享锁是指同一时刻可以被多个线程持有的锁,典型的代表是 CountDownLatch 和 Semaphore。原创 2024-04-05 20:08:13 · 1398 阅读 · 1 评论 -
并发线程基础第八篇
FunctionalInterface // 拒绝策略//1.任务队列//2.锁//生产者条件变量//4.消费者条件变量//5.容量//超时的阻塞添加try{//将时间统一转化为纳秒try {//awaitNanos()方法,返回的时间是一个剩余时间,把返回的时间重新赋值给它,防止虚假唤醒,从头再等return t;}finally {//阻塞获取//获取任务的时候需要保证线程安全,需要加一把锁try{try {return t;原创 2024-04-04 10:10:32 · 1045 阅读 · 0 评论 -
并发线程基础第七篇
享元模式(Flyweight Pattern)是一种结构型设计模式,用于优化多个具有相似状态或者相似对象的内存占用。原创 2024-04-01 06:50:49 · 506 阅读 · 0 评论 -
并发线程基础第六篇
Unsafe对象提供了非常底层的,操作内存,线程的方法,Unsafe对象不能直接调用,只能通过反射获得。AtomicInteger,LockSupport中的park,unpark方法底层都是采用Unsafe实现的。获取Unsafestatic {try {设置自定义AtomicDatastatic {try {// data 属性在 DataContainer 对象中的偏移量,用于 Unsafe 直接访问该属性。原创 2024-03-31 11:52:46 · 2809 阅读 · 0 评论 -
并发线程基础第五篇
happens-before 规定了对共享变量的写操作对其它线程的读操作可见,它是可见性与有序性的一套规则总结,抛 开以下 happens-before 规则,JMM 并不能保证一个线程对共享变量的写,对于其它线程对该共享变量的读可见。它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取到它的值,线程操作volatile变量都是直接操作主存。读屏障保证在该屏障之后,对共享变量的读取,加载的是主存中最新的数据,而不是缓存中的。原创 2024-03-29 07:11:27 · 822 阅读 · 0 评论 -
并发线程基础第四篇
可重入(Reentrancy)指的是一个线程或进程可以再次进入自己已经持有的锁,而不会出现死锁或其他异常情况。在Java中,重入性是指同一个线程在持有锁的情况下能够再次获取该锁,而不会被自己所持有的锁所阻塞。synchronized关键字和ReentrantLock类都是可重入锁的典型代表。当一个线程已经持有了某个对象的锁时,它可以再次获取这个锁而不会被阻塞,这种机制就是可重入性的体现。原创 2024-03-27 06:58:43 · 912 阅读 · 0 评论 -
并发线程基础第三篇
obj.wait()让进入到Object监视器的线程到waitSet等待obj.notify()从监视器的waitSet等待的线程挑一个唤醒obj.notifyAll()唤醒全部在Object上waitSet等待的线程obj.wait(Long)让该线程等待一定的时间,到时间自动唤醒示例@Slf4jlog.debug("我是线程一");//让线程在obj上一直等待下去log.debug("我是线程一,我被唤醒了");}).start();原创 2024-03-26 07:45:18 · 1183 阅读 · 0 评论 -
并发线程基础第二篇
把锁想象称一个房子,锁对象就是一把钥匙,钥匙不同,房子不同,如果操作同一静态变量,还是会造成线程不安全的问题。每个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁之后,该对象头的Mark Word(可以去搜一下具体的java对象头底层是什么)中就被设置指向Monitor对象的指针。:如果在尝试加轻量级锁的过程中,cas操作无法成功,这时一种情况就是有其他线程已经为此对象加上了轻量级锁(表明有竞争),这时需要进行锁膨胀,将轻量级锁变为重量级锁。原创 2024-03-24 15:53:05 · 1158 阅读 · 0 评论 -
并发线程基础第一篇
有一种特殊的线程叫做守护线程,只要其他非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。垃圾回收器线程就是一种守护线程,Tomcat中的Acceptor和Poller线程都是守护线程,所以Tomcat接收到shutdown命令后,不会等它们处理完当前请求。当Context Switch发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java中对应的概念就是。启动线程,前面我们已展示过,注意,一个线程只能一次,只能调用一次start()方法。以调用角度来讲,如果。原创 2024-03-23 08:00:00 · 2401 阅读 · 0 评论