SKILL BENCHMARK

Java Multithreading and Concurrency Proficiency (Advanced Level)

  • 15m
  • 15 questions
The Java Multithreading and Concurrency Proficiency (Advanced Level) benchmark evaluates your ability to use semaphore, volatile, and atomic variables, as well as concurrent programming objects and multithreaded Java applications. You will be evaluated on your ability to use the ExecutorService to manage the execution of multiple tasks, schedule the execution of one-off and recurring tasks, and adopt a divide-and-conquer approach toward solving a large problem using the Fork/Join framework. The learners who score high on this benchmark demonstrate that they have the skills to recognize concurrent programming objects and scale a multithreaded application.

Topics covered

  • compare the performance of insert operations on various list and map data structures in Java
  • describe how an ExecutorService instance can be shut down while still allowing submitted tasks to run
  • identify some of the different types of synchronized collection objects available in Java
  • recall the effect of declaring a shared variable to be volatile
  • recognize the effect of iterating over a collection while a write is being performed
  • recognize the effects of updates to shared variables in a multithreaded Java applications
  • recognize the options available to monitor the execution of a task using a Future object
  • schedule one-off tasks to execute at a specified point in the future using the ScheduledExecutorService
  • schedule recurring tasks to execute at a set interval using the ScheduledExecutorService
  • submit a large task to ForkJoinPool and recognize how these can be split into smaller sub-tasks
  • use a ConcurrentHashMap in a multithreaded Java application
  • use a CopyOnWriteArrayList to synchronize updates from multiple threads
  • use a CountDownLatch to synchronize with the execution of threads submitted to an ExecutorService
  • use semaphores in a multithreaded Java application where different threads require varying levels of permits to access a shared resource
  • use the Fork/Join framework to break up a large task into a number of smaller sub-tasks