Transactional Java Futures José Pereira Instituto Superior Técnico, Lisboa, Portugal jose.m.pereira@ist.utl.pt Abstract. Because of its importance in nowadays technology, paral- lel programming has been subject of numerous efforts over the years to ease the task of building highly parallel programs. Software transactional memory and Futures are two prominent examples that arise from such efforts. By providing important abstractions over complex concurrency issues, they allow programmers to build parallel programs easier than other parallel programming models. However, they are not a panacea for parallel programming, as they often demonstrate crucial limitations that hinder one’s ability to extract higher levels of parallelism from applica- tions. This article proposes an unified system that supports the combi- nation of both models, STM and Futures. In this article we show that our solution preserves the abstractions provided by both systems, and achieves better effectiveness of extracting parallelism than systems that focus on exploring each one individually. Keywords: Software Transactional Memory, Thread-Level Speculation, Java Futures, Java Versioned Transactional Memory 1 Introduction The vast computing power in modern hardware opens doors to new kinds of applications that require powerful processing which traditional single-core com- puters cannot offer. At the same time, computational requirements are ever increasing, both in the area of scientific and business computing. Software com- panies have applications in which fast runtime is a necessity or a competitive advantage [1, 2, 3]. However, it is hard for software developers to take advantage of such com- putational resources, as parallel programs are harder to design, implement and debug than their equivalent sequential versions [4, 5]. Because parallel program- ming is such a hard task, researchers have been constantly trying to develop new models that ease the challenge of building non-trivial parallel programs [4, 5]. Nowadays, there are several models that ease the task of developing parallel programs, two of the most relevant examples are Transactional Memory (TM) and Futures. Futures are recently part of the Java 2 Platform Standard Edition 5. A Java future is a simple and elegant concurrency abstraction that allows the programmer to annotate method calls in a sequential program that can run in parallel with the corresponding continuation code.