Note: projects that are considered concurrent have to implements Runnable, or extends Runnable, or extends Threads, or use syncronized keyword (method or block).


Notice that although more than 75% of all projects use, at least, one concurrent construct, only 19% take advantage of java.util.concurrent library. In our opnion, developers are wasting many opportunities to use higher level/more efficient abstractions.

More curious statistics.


The most common used constructs per 100KLoC.

ConstructMedianMean
SMLALLSMLALL
Atomic variables 22.89 8.72 1.56 8.05 48.46 17.868.17 22.05
extends Runnable 19.322.380.86 2.37 19.784.871.58 7.36
extends Thread 25.006.052.7413.0042.549.955.4628.93
Executors Constructs 20.93 3.90 11.90 5.13 34.82 13.14 11.74 18.73
implements Runnable 27.457.183.7313.8546.9212.137.4328.43
sync blocks 73.4733.2231.5255.04152.2975.0371.32117.60
sync methods 81.4354.2947.6566.75184.6899.7688.50145.20
notify() 26.265.772.418.6941.6610.785.6424.99
notifyAll() 24.006.372.779.0950.4511.657.2224.89
volatile 29.958.863.5511.7369.7631.3118.9240.71
wait() 25.607.223.9711.5146.8014.1211.2429.86

Where S, M, L means Small, Medium and Large.