---
tags: computer science, java
---
<center>
# **Java Concurrent Programming**
:::info
Location: Room 108, 德田館
Time: 1300 ~ 1600
:::
</center>
<div style="text-align: right">``xxx''<br>-- xxx</div>
## **Class Information**
### Instructor
- Name: 盧政良 (Zheng-Liang Lu, Arthur)
- Email: arthurzllu@gmail.com
### Objectives
- Comprehend design patterns widely used in large-scale projects
- Learn generics, annotations, and reflection, Stream APIs (with lambdas), and Optional APIs
- Start your first web application powered by Spring Boot
- Exploit concurrent programming with Concurrency API
### Prerequisites
- Java Programming [link](https://www.csie.ntu.edu.tw/~d00922011/java.html)
### Working Environment
- JDK8+ with Eclipse
### Recording Classroom Lectures Policy
:::warning
Recording of classroom lectures is <font color="red">**prohibited**</font> unless advance written permission is obtained from the class instructor and any guest presenter(s).
:::
## **Overview**
### Concurrent Programming
- Java Virtual Machine (JVM)
- Basic concepts of operating systems (OS)
- Process & thread
- Job scheduling: round-robin (RR)
- Thread & Runnable
- Race condition, mutual exclusion & synchronized methods/blocks
- Producer-consumer problem (bounded-buffer problem) & semaphores
- Dining philosophers: deadlock, livelock, starvation
- High-level concurrency framework:
- Thread pools
- Fork-join pools
- Asynchronous computation
- Concurrent data structures, atomic variables, synchronizers, monitor locks
## **Schedule**
### ++Concurrent Programming++
- Basics of operating systems (OS)
- Jerry Breecher, <a href="https://web.cs.wpi.edu/~cs3013/c07/lectures/Section03-Processes.pdf">processes</a> and <a href="https://web.cs.wpi.edu/~cs3013/c07/lectures/Section04-Threads.pdf">threads</a>
- (FYR) Jserv, <a href = "https://hackmd.io/@sysprog/linux-concepts">Linux 核心設計: 作業系統術語及概念</a>, 2020
- Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, <a href = "http://pages.cs.wisc.edu/~remzi/OSTEP/">Operating Systems: Three Easy Pieces</a>, 2018 (online version)
- (FYR) Virtual memory
- Elaine's Blog , [CH8 記憶體管理 (Memory Management Strategies)](https://kim85326.github.io/2018/01/09/CH8-%E8%A8%98%E6%86%B6%E9%AB%94%E7%AE%A1%E7%90%86-(Memory-Management-Strategies)/), 2018.1.9
- Elaine's Blog , [CH9 虛擬記憶體管理 (Virtual-Memory Management)](https://kim85326.github.io/2018/01/09/CH9-%E8%99%9B%E6%93%AC%E8%A8%98%E6%86%B6%E9%AB%94%E7%AE%A1%E7%90%86-(Virtual-Memory-Management)/), 2018.1.9
- Translation lookaside buffer (TLB) https://en.wikipedia.org/wiki/Translation_lookaside_buffer
- Java threads [pdf](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/JavaThreads.pdf)
- (FYR) Java concurreny tutorial [link](https://docs.oracle.com/javase/tutorial/essential/concurrency/)
- Race condition: [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/RaceConditionDemo.zip)
- https://people.engr.tamu.edu/hlee42/csce314/lec17-JVM.pdf
- Parallelism is always good? [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/MapReduceDemo.java) and [Amdahl's law](https://en.wikipedia.org/wiki/Amdahl%27s_law)</li>
- Application (feat. parallel stream) [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/MonteCarloMultiThreadDemo.zip)
- Sychronization [pdf](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/Synchronisation.pdf) [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/SemaphoreDemo.java)
- Jserv, [作業系統概念: Concurrency 程式設計篇](https://youtu.be/3mkug2ygdIs)
- Linus Torvalds, a reply to discussion about spinlock implementation and Linux scheduler ([1](https://www.realworldtech.com/forum/?threadid=189711&curpostid=189723), [2](https://www.realworldtech.com/forum/?threadid=189711&curpostid=189752), [3](https://www.realworldtech.com/forum/?threadid=189711&curpostid=189755), [4](https://www.realworldtech.com/forum/?threadid=189711&curpostid=189759)), 2020.1.3 (also read [news](https://www.ithome.com.tw/news/135226))
- (FYR) [How to implement synchronized methods/blocks in Java?](https://www.itread01.com/content/1544398054.html), 2018
- (FYR) [An Introduction to Lock-Free Programming](https://preshing.com/20120612/an-introduction-to-lock-free-programming/), 2012
- Concurrent application [pdf](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/MultithradedServer.pdf) [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/client_server_model_sample.zip)
- More Java socket programming examples: [link](https://cs.lmu.edu/~ray/notes/javanetexamples/)
- Java concurrency framework
- Popcorny Lu, [Java 多執行緒的基本知識](https://popcornylu.gitbooks.io/java_multithread/content/) [code](https://www.csie.ntu.edu.tw/~d00922011/java2/multithreading/ConcurrentFramework.zip)
- 20 Examples of Using Java’s CompletableFuture [link](https://dzone.com/articles/20-examples-of-using-javas-completablefuture)
- Multi-Threading in Spring Boot Using CompletableFuture [link](https://dzone.com/articles/multi-threading-in-spring-boot-using-completablefu)
- (FYR) Dmitry Aleksandrov, Programming the GPU in Java, 2020 [link](https://blogs.oracle.com/javamagazine/programming-the-gpu-in-java)
## **References**
### ++Concurrent Programming++
- Brian Goetz, [Java Concurrency in Practice](https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601), 2006
![](https://i.imgur.com/syDGooT.png =100x)
- Maurice Herlihy, Nir Shavit, Victor Luchangco, and Michael Spear, [The Art of Multiprocessor Programming](https://www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0124159508/), 2/e, 2020
![](https://i.imgur.com/XC22Jsp.png =110x)
- Carlo A. Furia, [Concurrent Programming - TDA383/DIT390](http://www.cse.chalmers.se/edu/year/2016/course/TDA383_LP3/), Chalmers University of Technology, 2017
- Shan He, [SSC: Networks/Concurrency 2014/2015](https://www.cs.bham.ac.uk/~szh/teaching/ssc/), School of Computer Science, University of Birmingham
- Jeff Preshing, [An Introduction to Lock-Free Programming](https://preshing.com/20120612/an-introduction-to-lock-free-programming/), 2012
- Liam O'Connor, [COMP3151/9154 Foundations of Concurrency](http://www.cse.unsw.edu.au/~cs3151/20T2/), 2020
### ++Parallel Computing++
- [Introduction to Parallel Computing Tutorial](https://hpc.llnl.gov/training/tutorials/introduction-parallel-computing-tutorial )
- [POSIX Threads Programming](https://hpc-tutorials.llnl.gov/posix/)
- [OpenMP Tutorial](https://hpc.llnl.gov/openmp-tutorial)
#### Operating System
- https://www.linux.org/
![](https://i.imgur.com/tRyM5V8.png)
- Jserv, [Linux Kernel Internals](http://wiki.csie.ncku.edu.tw/linux/schedule), NCKU [fb](https://www.facebook.com/groups/system.software2021/)