ACM Computing Surveys (CSUR)
Proceedings of the conference on TRI-Ada '97
Concurrent programming: the Java programming language
Concurrent programming: the Java programming language
A comparison of the concurrency features of Ada 95 and Java
Proceedings of the 1998 annual ACM SIGAda international conference on Ada
Experience with processes and monitors in Mesa
Communications of the ACM
Monitors: an operating system structuring concept
Communications of the ACM
The structure of the “THE”-multiprogramming system
Communications of the ACM
Concurrent Programming in Java. Second Edition: Design Principles and Patterns
Concurrent Programming in Java. Second Edition: Design Principles and Patterns
A practical comparison between Java and Ada in implementing a real-time embedded system
Proceedings of the 2003 annual ACM SIGAda international conference on Ada: the engineering of correct and reliable software for real-time & distributed systems using ada and related technologies
Comparing Java, C# and Ada monitors queuing policies: a case study and its Ada refinement
ACM SIGAda Ada Letters
Quasar: a new tool for concurrent Ada programs analysis
Ada-Europe'03 Proceedings of the 8th Ada-Europe international conference on Reliable software technologies
Hi-index | 0.00 |
With the development of embedded and mobile systems, Java is being widely used for application programs and is also considered for implementing systems kernel or application platforms. It is the aim of this paper to exemplify some subtle programming errors that may result from the process queuing and awaking policy, which corresponds to a weak fairness semantic and which has been chosen for implementing the monitor concept in this language. Two examples show some subtle deadlocks resulting from this policy. The first example deals with process synchronization: processes seeking after partners for a peer-to-peer communication call a symmetrical rendezvous server. The second example concerns resource sharing according to a solution of the dining philosophers paradigm. In this example, several implementations are presented, the last ones aiming to provide deterministic process awakening. All these examples have been validated and simulated and this allows comparing their concurrency complexity and effectiveness. Our conclusion is, first, that the use of Java for multithreading programming necessitates sometimes additional shielding code for developing correct programs and, second, that a good acquaintance with several styles of concurrent programming helps designing more robust Java solutions, once the choice of the implementation language is irrevocable.