java多线程
文章平均质量分 76
多线程
松仔log
初出茅庐的程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java多线程——内存模型
对于如下代码,可能输出(0,1)/(1,0)/(1,1)/(0,0)原创 2025-02-24 18:09:18 · 454 阅读 · 0 评论 -
Java多线程——原子变量与非阻塞同步机制
处理器针对共享数据的并发访问提供了一些特殊指令,操作系统和JVM可以用其实现锁和并发的数据结构,比加锁的方式拥有更好的性能。原创 2025-02-24 01:30:57 · 533 阅读 · 0 评论 -
Java多线程——构建自定义的同步工具
AQS用于构建锁和同步器的框架,ReentrantLock、Semaphore 、CountDownLatch、 ReentrantReadWriteLock、 SynchronousQueue和 FutureTask是基于AQS 构建的,它们没有直接扩展AQS,而是委托给私有子类。原创 2025-02-23 16:46:28 · 409 阅读 · 0 评论 -
Java多线程——显式锁
ReentrantLock实现了Lock,提供了和synchronized相同的互斥性和内存可见性,需要显式获取和释放锁。原创 2025-02-22 00:54:35 · 272 阅读 · 0 评论 -
Java多线程——并发程序的测试
相比于串行程序,并发程序潜在的错误发生是随机的,并发测试分为。原创 2025-02-21 01:31:43 · 1218 阅读 · 0 评论 -
Java多线程——避免活跃性危险
当两个线程以不同的顺序来获得相同的锁。原创 2025-02-15 01:25:11 · 204 阅读 · 0 评论 -
Java多线程——线程池的使用
可将对象转为ThreadPoolExecutor,再调用对应属性的setter方法,但newSingleThreadExecutor除外,其使用unconfigurableExecutorService封装,只暴露了ExecutorService中的方法。线程池通过线程工厂创建线程,默认线程工厂创建一个新的非守护线程,可通过重新ThreadFatory的newThread方法自定义配置信息,每次创建线程都会调用该方法。执行时间较长的任务不仅会造成线程池阻塞,也会增加执行时间较短的任务的服务时间。原创 2025-02-12 20:39:43 · 926 阅读 · 0 评论 -
Java多线程——任务执行和取消
Executor基于生产者—消费者模式,用Runnable表示任务,提交任务操作相当于生产者,执行任务的线程相当于消费者。原创 2025-02-10 15:24:40 · 891 阅读 · 0 评论 -
Java多线程——基础构建模块
当通过复合操作并发修改容器时,可能出现线程不安全的问题A/B两个线程运行情况可能如下创建新操作时,应该和容器的其他操作一样都是原子操作,使用容器自身的锁保护方法同理,在遍历Vector时,size可能被其他线程修改,同样需要加锁加锁会影响性能,可以通过克隆容器(克隆时需要加锁),并在副本上进行迭代。原创 2025-02-06 17:54:35 · 918 阅读 · 0 评论 -
Java多线程——对象的组合
通过自身的内置锁增加了一层额外的加锁,即使List不是线程安全的或者修改了它的加锁实现,ImprovedList仍是线程安全的。但上面的做法是错误的,因为synchronizedList内部的锁和ListHelper的锁不是同一个。客户端加锁是指,对于使用某个对象X的客户端代码,使用X本身用于保护其状态的锁来保护这段客户代码。若需要非实时更新且只读的对象引用,因为map内容是不可变的,可以浅拷贝。但会将类的加锁代码放到与其完全无关的其他类中,会破坏同步策略的封装性。但数据量大时,每次拷贝会降低性能。原创 2025-02-02 00:46:08 · 687 阅读 · 0 评论 -
Java多线程——对象的共享
一个线程修改了对象状态后,其他线程能够看到发生的状态变化如上,子线程判断ready和输出number,主线程修改后,可能出现数据在多个线程共享时,就应该使用同步确保可见性。原创 2025-01-31 15:58:56 · 939 阅读 · 0 评论 -
Java多线程——线程安全性
当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的无状态对象是线程安全的,其不包含任何域,也不包含任何对其他类中域的引用,调用过程产生的临时状态也仅存在于线程栈上的局部变量中。原创 2025-01-29 20:39:34 · 424 阅读 · 0 评论
分享