Program JavaZone

Foredrag Torsdag 3. september

Concurrency testing on the JVM

Room 7

Engelsk 45 min java concurrency testing

Adam Warski

I am the co-founder of SoftwareMill, now part of VirtusLab, where I primarily generate code using Java, Scala, Rust and other interesting technologies. I am actively involved in open-source projects, such as Ox, Jox, Tapir, sttp, and others. I have also been a speaker at major conferences, including JavaOne, Devoxx, GeeCON and ScalaDays.

In addition to writing closed- and open-source software, I spend my free time exploring various programming-related subjects. Any ideas or insights I gain usually end up with a blog (https://warski.org/articles).

When testing a concurrent program, you never know if it really works or if you got lucky. As the famous Dijkstra quote says: "Program testing can be used to show the presence of bugs, but never to show their absence!".

Full model checking or formal correctness proofs remain largely intractable: too expensive, too slow to develop (even with AI assistance), and too hard to maintain over time. However, not all hope is lost: a growing body of tools is available to help you gain more confidence with your concurrent programs.

These tools work by instrumenting the bytecode and executing a series of thread interleavings deterministically. It's not a correctness proof, but it might boost your confidence just enough to ship the code.

In the talk, I'd like to present two such tools: Lincheck and Fray, compare their functionalities, demonstrate how they work, identify the kinds of problems they might detect, discuss their applications, and highlight the issues they have already helped uncover.

Probably most interesting to backend developers and library authors, who have to deal with concurrency first-hand

  1. The AI puppet dance Room 1
  2. Digipost om UX i Norges nye virksomhetslommebok Room 2
  3. A Practical Guide to European Public Cloud Providers Room 3
  4. Sikkerhet fra mangfold Room 4
  5. Domain-driven web APIs Room 5
  6. Package-by-(sub)domain Room 6
  7. You're absolutely right, it was your home directory! Room 8
  8. Debugging Class Loading with GDB Room 6