Both teaching and learning multithreaded ing are complex tasks, due to the abstraction of the concepts, the non-determinism of the scheduler, the impossibility of using classical strategies adopted in procedural programming and the need to develop a practical vision of concurrency problems. In order to overcome these difficulties we developed JThreadSpy, an educational tool that collects execution traces and displays them with a selectable level of detail using an augmented UML sequence diagram, thus providing a synoptic representation of the execution. In this article, we show the experimental results about the effectiveness of using JThreadSpy in undergraduate and graduate courses, explaining how it helps students to solve concurrency problems. JThreadSpy is also useful in the teaching process, because it can concretely show some malicious programming patterns that lead to race conditions or deadlocks. Keywords-educational technology; concurrent programming; Java language; execution ...