
Java并发编程
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
Java并发编程使用 Semaphore 完成对资源的控制访问
最近在复习操作系统的时候,看到一个使用信号量的例子。然后自己用java实现了一下,本来还想用swing可视化一下的,后来想想就算了。。。题目有一个仓库存放两种零件A和B,最大库容各为 m 个。有一个车间不断地取A和B进行装配, 每次各取一个。有两组供应商不断供应A和B (每次一个),为保证齐套和合理库存,当某种零件的数量比另一种的数量超过n (n < m) 个时,暂停对数量大的零件的进货,集中补齐少的零件。初始时仓库是空的。m = 10, n = 3代码及其注释已经很详细了。原创 2021-06-26 16:52:00 · 312 阅读 · 0 评论 -
Java采用 Theaker & Brookes 提出的消息传递算法 实现“下棋模型”
文章目录问题背景消息传递算法的特点代码模拟问题背景最近要在做网页版的五子棋,下棋必然有一个同步的操作,否则就会出现一个人连续下多次的情况—— 当然你可以在前端就做出控制,但是,如果要保证资源的绝对的互斥访问呢?这里的同步,是在有服务器这个角色的背景下实现的。也就是说,客户端请求资源,服务端负责资源的同步、互斥操作。客户端、服务端这里采用 socket 通信。消息传递算法的特点客户端请求客户端(或者进程、线程)请求互斥资源的访问,不过等到服务器发来的许可才能继续接下来的操作。服务器控原创 2021-05-17 17:06:08 · 159 阅读 · 0 评论 -
山东大学操作系统实验 —— 2.进程通信实验(用Java 线程间的 Pipe流模拟了 IPC机制)
用Java 线程间的 pipe流模拟了 IPC机制。package 实验2;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;import java.util.Scanner;/** * @Author: Song yang Ji * @ProjectName: java-os * @Version 1.0 * @Description: */原创 2021-05-16 22:40:04 · 571 阅读 · 0 评论 -
Java多种方式实现 有界缓冲区下的多个生产者、消费者模型 (Semaphore、while+wait+notifyAll)
只使用 Semaphore使用信号量限制对有限资源的访问使用二进制信号量实现锁import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * @Author: Song yang Ji * @ProjectName: learn-multiThread * @Version 1.0 * @Description: */class ProducerThread extends Thr原创 2021-05-13 00:14:14 · 380 阅读 · 2 评论 -
LeetCode 1116. 打印零与奇偶数 ( Lock + Condition多路通知 )
1116. 打印零与奇偶数Lock + Conditionclass ZeroEvenOdd { private int n; Lock lock = new ReentrantLock(); // 上一个数字是否是 0 boolean hasZero = false; // 上一个数字是否是 奇数 boolean hasOdd = false; Condition signalZero = lock.newCondition();原创 2021-05-07 14:49:18 · 128 阅读 · 0 评论 -
LeetCode 1115. 交替打印FooBar (wait + notify、BlockingQuque)
1115. 交替打印FooBar文章目录wait + notifyBlockingQueueSynchronousQueue一道典型的一个生产者、一个消费者的场景wait + notifyclass FooBar { private int n; boolean available = false; public FooBar(int n) { this.n = n; } public void foo(Runnable printFoo原创 2021-05-07 01:08:24 · 104 阅读 · 0 评论 -
LeetCode 1114. 按序打印(忙等、wait+notify、Lock + Condition)
1114. 按序打印busy waitingclass Foo { // 线程可见性 volatile int count = 0; public Foo() { } public void first(Runnable printFirst) throws InterruptedException { // printFirst.run() outputs "first". Do not change or remove thi原创 2021-05-06 21:30:19 · 99 阅读 · 0 评论 -
多线程究竟能加快程序的运行吗?———— 对HotSpot虚拟机线程模型的测试
文章目录问题引入测试环境测试代码测试结果整理问题引入《深入理解Java虚拟机》一书中介绍了Java的线程模型,其中提到在jdk的早期版本中,采取了多个用户线程对应一个内核线程的模型。而如今的jdk版本(不论是Oracle JDK还是Open JDK,都默认用了HotSpot虚拟机),而现在的HotSpot虚拟机模型在实现了Java的线程模型时,采取的是1:11:11:1的线程模型 —— 每一个用户线程都对应一个内核级线程。对于不同线程模型的区别以及优缺点,可以看我的另一篇博客。这里先留一个坑。测原创 2021-03-31 19:28:27 · 455 阅读 · 3 评论