Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 50abab9cbe0831c614ab6df0acdcf274367dd902)
+++ src/benchmark/Makefile.am	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
@@ -125,13 +125,18 @@
 mutex$(EXEEXT) :\
 	mutex-function.run	\
+	mutex-fetch_add.run	\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
 	mutex-cfa1.run		\
 	mutex-cfa2.run		\
-	mutex-cfa4.run
+	mutex-cfa4.run		\
+	mutex-java_thread.run
 
 mutex-function$(EXEEXT):
 	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
+mutex-fetch_add$(EXEEXT):
+	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 mutex-pthread_lock$(EXEEXT):
 	@@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
@@ -148,4 +153,10 @@
 mutex-cfa4$(EXEEXT):
 	@${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-java_thread$(EXEEXT):
+	@javac mutex/JavaThread.java
+	@echo "#!/bin/sh" > a.out
+	@echo "cd mutex && java JavaThread" >> a.out
+	@chmod a+x a.out
 
 ## =========================================================================================================
@@ -167,4 +178,11 @@
 signal-cfa4$(EXEEXT):
 	@${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-java_thread$(EXEEXT):
+	@javac schedint/JavaThread.java
+	@echo "#!/bin/sh" > a.out
+	@echo "cd schedint && java JavaThread" >> a.out
+	@chmod a+x a.out
+
 
 ## =========================================================================================================
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 50abab9cbe0831c614ab6df0acdcf274367dd902)
+++ src/benchmark/Makefile.in	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
@@ -537,13 +537,18 @@
 mutex$(EXEEXT) :\
 	mutex-function.run	\
+	mutex-fetch_add.run	\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
 	mutex-cfa1.run		\
 	mutex-cfa2.run		\
-	mutex-cfa4.run
+	mutex-cfa4.run		\
+	mutex-java_thread.run
 
 mutex-function$(EXEEXT):
 	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
+mutex-fetch_add$(EXEEXT):
+	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 mutex-pthread_lock$(EXEEXT):
 	@@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
@@ -560,4 +565,10 @@
 mutex-cfa4$(EXEEXT):
 	@${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-java_thread$(EXEEXT):
+	@javac mutex/JavaThread.java
+	@echo "#!/bin/sh" > a.out
+	@echo "cd mutex && java JavaThread" >> a.out
+	@chmod a+x a.out
 
 signal$(EXEEXT) :\
@@ -578,4 +589,10 @@
 signal-cfa4$(EXEEXT):
 	@${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-java_thread$(EXEEXT):
+	@javac schedint/JavaThread.java
+	@echo "#!/bin/sh" > a.out
+	@echo "cd schedint && java JavaThread" >> a.out
+	@chmod a+x a.out
 
 waitfor$(EXEEXT) :\
Index: src/benchmark/mutex/JavaThread.java
===================================================================
--- src/benchmark/mutex/JavaThread.java	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
+++ src/benchmark/mutex/JavaThread.java	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
@@ -0,0 +1,14 @@
+public class JavaThread {
+	public synchronized void noop() {}
+
+	public static void main(String[] args) {
+		int NoOfTimes = 5000000;
+		JavaThread j = new JavaThread();
+		long start = System.nanoTime();
+		for(int i = 1; i <= NoOfTimes; i += 1) {
+			j.noop();
+		}
+		long end = System.nanoTime();
+		System.out.println( (end - start) / NoOfTimes);
+	}
+}
Index: src/benchmark/mutex/fetch_add.c
===================================================================
--- src/benchmark/mutex/fetch_add.c	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
+++ src/benchmark/mutex/fetch_add.c	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+volatile int value;
+
+void __attribute__((noinline)) do_call() {
+	__atomic_add_fetch( &value, 1, __ATOMIC_SEQ_CST );
+	asm volatile ("");
+	__atomic_sub_fetch( &value, 1, __ATOMIC_SEQ_CST );
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			do_call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/schedint/JavaThread.java
===================================================================
--- src/benchmark/schedint/JavaThread.java	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
+++ src/benchmark/schedint/JavaThread.java	(revision 6aa537a4e23382dcd70067bf61863a8aa795cccb)
@@ -0,0 +1,44 @@
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class JavaThread {
+	public synchronized void doWait  () throws InterruptedException { this.wait  (); }
+	public synchronized void doSignal() throws InterruptedException { this.notify(); }
+
+	public static AtomicBoolean go = new AtomicBoolean( false );
+
+	public static class Signaller extends Thread {
+		JavaThread j;
+		Signaller(JavaThread j) {
+			this.j = j;
+		}
+
+		public void run() {
+			go.set( true );
+			try {
+				while( JavaThread.go.get() ) {
+					this.j.doSignal();
+				}
+			} catch(InterruptedException trash) {
+
+			}
+		}
+	}
+
+	public static void main(String[] args) throws InterruptedException {
+		int NoOfTimes = 50000;
+		JavaThread j = new JavaThread();
+		Signaller s = new Signaller(j);
+		s.start();
+		while( !JavaThread.go.get() ) {
+			Thread.yield();
+		}
+		long start = System.nanoTime();
+		for(int i = 1; i <= NoOfTimes; i += 1) {
+			j.doWait();
+		}
+		long end = System.nanoTime();
+		go.set( false );
+		s.join();
+		System.out.println( (end - start) / NoOfTimes);
+	}
+}
